相关文章推荐
无邪的作业本  ·  pyqt matplotlib刷新 - ...·  9 月前    · 
咆哮的葫芦  ·  Python ...·  1 年前    · 

先来看下面两个selection结果:
selection对象一:
在这里插入图片描述

selection对象二:
在这里插入图片描述

很奇怪,为什么同样选中一段文字,为什么selection对象的属性会不一样呢?
那就需要明确一下Selection对象的各个属性的意义了。

  • 锚点(anchor)
    锚指的是一个选区的起始点。当我们使用鼠标选择一个区域的时候,锚点就是我们鼠标按下瞬间的那个点。在用户拖动鼠标时,锚点是不会变的。

  • 焦点(focus)
    选区的焦点是该选区的终点,当您用鼠标框选一个选区的时候,焦点是你的鼠标松开瞬间所记录的那个点。随着用户拖动鼠标,焦点的位置会随着改变。

  • 范围(range)
    范围指的是文档中连续的一部分。一个范围包括整个节点,也可以包含节点的一部分,例如文本节点的一部分。用户通常下只能选择一个范围。“范围”会被作为range对象返回。Range对象也能通过DOM创建、增加、删减。

  • anchorNode
    返回该选区起点所在的节点

  • anchorOffset
    返回一个数字,表示该选区起点在 anchorNode 中的位置偏移量。

  1. 如果 anchorNode 是文字节点,那么返回的就是从该文字节点的第一个字开始,直到被选中的第一个字之间的字数(如果第一个字就被选中,那么偏移量为零)
  2. 如果 anchorNode 是一个元素,那么返回的就是在选区第一个节点之前的同级节点总数。(这些节点都是 anchorNode 的子节点)
  • focusNode
    返回该选区终点所在的节点。

  • focusOffset
    返回一个数字,表示该选区终点在 focusNode 中的位置偏移量。

  1. 如果 focusNode 是文字节点,那么选区末尾未被选中的第一个字,在该文字节点中是第几个字(从0开始计),就返回它。
  2. 如果 focusNode 是一个元素,那么返回的就是在选区末尾之后第一个节点之前的同级节点总数。
  • isCollapsed
    返回一个布尔值,用于判断选区的起始点和终点是否在同一位置。

  • rangeCount
    返回一个数字,表示该选区所包含的连续范围的数量。一般为1,因为通常情况下用户只能选择一个范围。

  • getRangeAt
    返回选区开始的节点(Node)。
    因为通常情况下用户只能选择一个范围,所以只有一个选区(range),此方法一般为getRangeAt(0)

  • collapse(光标落在的目标节点, offset)
    将当前的选区折叠为一个点

  • extend
    将选区的焦点移动到一个特定的位置。

  • modify
    修改当前的选区。

  • collapseToStart
    将当前的选区折叠到起始点。

  • collapseToEnd
    将当前的选区折叠到最末尾的一个点。

  • selectAllChildren
    将某一指定节点的子节点框入选区

  • addRange
    一个区域(Range)对象将被加入选区。

  • removeRange
    从选区中移除一个区域。

  • removeAllRanges
    将所有的区域都从选区中移除。

  • deleteFromDocument
    从页面中删除选区中的内容。

  • selectionLanguageChange
    当键盘的朝向发生改变后修改指针的Bidi优先级。

  • toString
    返回当前选区的纯文本内容。
    在这里插入图片描述

  • containsNode
    判断某一个node是否为当前选区的一部分。

所以现在就可以明白为什么同样选中一段文字,Selection对象不一样了吧?
用户可能从左到右(与文档方向相同)选择文本或从右到左(与文档方向相反)选择文本。anchor指向用户开始选择的地方,而focus指向用户结束选择的地方。

文章目录selection对象术语属性方法window.getSelection(),返回一个Selection对象,表示用户选择的文本范围或光标的当前位置。selection对象先来看下面两个selection结果:selection对象一:selection对象二:很奇怪,为什么同样选中一段文字,为什么selection对象的属性会不一样呢?那就需要明确一下Selection... import parseNodes from "parse- window .get selection " ; const parseNodes = parseNodes ( ) ; 示例演示代码: import React , { Component } from "react" ; import parseNodes from "parse- window .get selection " ; class App extends Component { constructor ( ) { super ( ) ; this . state = { parsedNodes : [ ] boundingHeight 获取绑定TextRange 对象 的矩形的高度 boundingLeft 获取绑定TextRange 对象 的矩形左边缘和包含TextRange 对象 的左侧之间的距离 offsetLeft 获取 对象 相对于版面或由offsetParent属性指定的父坐标的计算左侧位置 offsetTop 获取对 3.侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。 8.愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰...
昨天晚上折腾了几个小时加今天的半天,终于搞定了这个问题 不得不感慨,就算看起来再微小的需求,实现起来还真得花一番功夫 只做了一点微小的工作,很是惭愧现在的解决方案,div输入的字符串的每一位都映射到一个数组 元素有两种状态,0表示正常显示,1表示需要被加粗,由此可以推出多种状态,如果某段字符串被选中,它在数组内的对应元素就会被设置成相对的状态码 再根据这个数组来渲染innerHTML
开发中,时常会遇到一个开发场景。当我们在编辑一个富文本的时候。当用户选择了某些文字。我们需要弹出一个窗,让用户选择是否把它变成可粗体,比如下面这个图 当然,今天不会直接敲出这个效果,而是解析下而已。毕竟敲出来对新手不友好,需要给予更多的时间思考 通过测试多次。我们发现了几个问题, 1.触发这事件的效果,是需要在鼠标起来的时候触发。 2.鼠标起来的时候,如果被选中的包含太多了。比如多个元素,则不显示操作 简单版本就只有这两点,更复杂的效果是还要考虑类似‘ctrl’+‘A’时的情况 对于上述问题,第一点,使用
getPosition(element) { //获得光标 var caretOffset = 0; var doc = element.ownerDocument || element.document; var win = doc.defaultView || doc.parent Window ; var sel; if (typeof win.get Selection != "undefined") { //谷歌、火狐 sel = win.getSel
使用 window .get Selection () 方法获取鼠标划取部分的起始位置和结束位置 返回一个 Selection 对象 ,表示用户选择的文本范围或光标的当前位置。 const selection = window .get Selection () ; selection 是一个 Selection 对象 。 如果想要将 selection 转换为字符串,可通过连接一个空字符串...
偶尔在一次需求中遇到这样的情景:将鼠标选中网页上面的文字以及图片,获取选中的文字与图片然后传给后台 let selObj = window .get Selection (); let selRange = selObj.getRangeAt(0); // 网上很多说这样就可以获取文本和图片 window .get Selection ().getRangeAt(0); // 再详细点的话可以打印一下selRange 打印 window .get Selection ().getRangeAt(0)可以看到这个 对象 的6个
if ( window .get Selection ) { var sel = window .get Selection (); alert(sel.rangeCount); //选区个数, 通常为 1 . sel.deleteFromDocument(); //清除选择的内容 var r = sel.getRangeAt(0); //即使已经执行了deleteFromDocument