189 8069 5689

JavaScript中怎么操作光标和选区

这篇文章主要为大家展示了“JavaScript中怎么操作光标和选区”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中怎么操作光标和选区”这篇文章吧。

成都创新互联是专业的甘井子网站建设公司,甘井子接单;提供网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行甘井子网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

在一些业务场景,比如高亮文本、输入编辑、等场景中需要对光标和选区进行操作时,可以使用浏览器提供的 Selection 对象和 Range 对象来操作光标和选区。

Selection 对象

Selection 对象表示用户选择的选区或插入符号的当前位置,它可能横跨多个元素。

//获取 Selection 对象
window.getSelection();

用户可能从左到右(与文档方向相同)选择文本或从右到左(与文档方向相反)选择文本。

anchor (锚点):指用户开始选择的地方。  
focus  (焦点):指用户结束选择的地方。

如果你使用鼠标选择文本的话,anchor 就指你按下鼠标键的地方,而 focus 就指你松开鼠标键的地方。anchorfocus 的概念不能与选区的起始位置和终止位置混淆,因为 anchor 可能在 focus 的前面,也可能在 focus 的后面,这取决于你选择文本时鼠标移动的方向,也就是按下鼠标键和松开鼠标键的位置。

如下图所示:

JavaScript中怎么操作光标和选区

JavaScript中怎么操作光标和选区

属性:

  • anchorNode:锚点(anchor)所在节点。

  • anchorOffset:

    • 如果 anchorNode 是文本节点、注释节点,返回锚点(anchor)到该节点中第一个字的字符个数。

    • 如果 anchorNode 是元素节点,返回锚点(anchor)之前的同级节点总数。

  • focusNode:焦点(focus)所在节点。

  • focusOffset:

    • 如果 focusNode 是文本节点、注释节点,返回焦点(focus)到该节点中的第一个字的字符个数。

    • 如果 focusNode 是元素节点,返回焦点(focus)之前的同级节点总数。

  • isCollapsed:表示选区的起始位置和终止位置是否重合的 Boolean 值,如果为 true,可以认为当前没有内容选中。

  • rangeCount:选区中包含的 Range 对象数量。

  • type:描述当前选区的类型,有以下三个值:

    • None:当前没有选择。

    • Caret:仅单击,但未选择,选区已折叠(即光标在字符之间,并未处于选中状态)。

    • Range:选择的是一个范围。

注意:   

以上所有属性都是只读属性

方法:

  • addRange(range)

    向选区(Selection 对象)中添加一个区域( Range 对象)。

    参数:

    range: 一个区域对象

    示例:
    文本

    //添加一个选区
    var text = document.querySelector("#text");
    var selObj = window.getSelection();
    var rangeObj = document.createRange();
    rangeObj.selectNode(text);
    selObj.addRange(rangeObj);
  • collapse(parentNode,offset)

    收起当前选区到一个点。文档不会发生改变。

    参数:

    parentNode: 光标落在的目标节点  
    offset: 可选,在目标节点内的偏移量

    示例:
    文本
//收起选区到一个点,光标落在一个可编辑元素上
var text = document.querySelector("#text")
window.getSelection().collapse(text,0);
  • collapseToEnd()

    取消当前选区,并把光标定位在原选区的最末尾处。

    参数:

    示例:
    var selObj = window.getSelection();
    selObj.collapseToEnd();
  • collapseToStart()

    取消当前选区,并把光标定位在原选区的最开始处。

    参数:

    示例:
    var selObj = window.getSelection();
    selObj.collapseToStart();
  • containsNode(aNode,aPartlyContained)

    判断指定的节点是否包含在 Selection 对象中(即是否被选中)。

    参数:

    aNode: 用于判断是否包含在 Selection 对象中的节点。  
    aPartlyContained:    
    当此参数为 true 时,Selection 对象包含 aNode 的一部分或全部时,containsNode() 方法返回true。          
    当此参数为 false (默认值)时,只有 Selection 对象完全包含 aNode 时,containsNode() 方法才返回 true

    示例:
    文本
  • var text = document.querySelector("#text");
    var selObj = window.getSelection();
    var contains = selObj.containsNode(text);
  • deleteFromDocument()

    DOM 中删除选中的文档片段。

    参数:

    示例:
    var selObj = window.getSelection();
    selObj.deleteFromDocument();
  • extend(node,offset)

    移动选区的焦点(focus)到指定的点。选区的锚点(anchor)不会移动。选区将从锚点(anchor)开始到新的焦点(focus),不管方向。

    参数:

    node: 焦点(focus)会被移至此节点内。  
    offset:  可选,默认值为0,焦点(focus)会被移至 node 内的偏移位置。

    示例:
    文本
  • var text = document.querySelector("#text");
    var selObj = window.getSelection();
    selObj.extend(text);
  • getRangeAt(index)

    返回一个当前选区包含的 Range 对象。

    参数:

    index: 该参数指定 Range 对象的索引。如果该数值大于或等于 rangeCount ,将会报错。

    示例:
    //获取一个 Selection 对象
    var selObj = window.getSelection();
    //获取一个 Range 对象
    var rangeObj  = selObj.getRangeAt(0);
  • modify(alter,direction,granularity)

    通过文本命令来更改当前选区或光标位置。

    参数:

    alter:改变类型,传入 move 来移动光标位置,或者 extend 来扩展当前选区。      
    direction:调整选区的方向。你可以传入 forwardbackward 来根据选区内容的语言书写方向来调整。或者使用 leftright 来指明一个明确的调整方向。  
    granularity:调整的距离颗粒度。可选值有 characterwordsentencelineparagraphlineboundarysentenceboundaryparagraphboundarydocumentboundary

    示例:
    var selection = window.getSelection();
    selection.modify("extend", "forward", "word");
  • 示例:
    
    
    var start = document.querySelector("#start");
    var end = document.querySelector("#end");
    var selObj = window.getSelection();
    selObj.setBaseAndExtent(start,0,end,0);

    Range 对象

    Range 对象表示被选中的文档片段。一个 Range 对象可能包含整个元素节点,也可能包含元素节点的一部分,例如文本节点的一部分文字。用户通常只能选择一个 Range 对象,但是有的时候用户也有可能选择多个 Range 对象(只有火狐浏览器可以选择多个 Range 对象)。

    可以用 Document 对象的 Document.createRange 方法创建 Range,也可以用 Selection 对象的 getRangeAt 方法获取 Range。另外,还可以通过 Document 对象的构造函数 Range() 来得到 Range

    属性:

    注意:   

    以上所有属性都是只读属性

    方法:

    选区中的多个区域

    一个 Selection 对象表示用户选择的区域(Range 对象)的集合,通常它只包含一个区域,访问方式如下:

    //获取一个 Selection 对象
    var selObj = window.getSelection();
    //获取一个 Range 对象
    var rangeObj  = selObj.getRangeAt(0);

    只有火狐浏览器实现了多个区域,如下图所示:

    JavaScript中怎么操作光标和选区

    修改选区样式

    使用 ::selection 选择器可以匹配被选中的部分。  
    目前只有一小部分 CSS 属性可以用于 ::selection 选择器:

    示例

    JavaScript中怎么操作光标和选区

    以上是“JavaScript中怎么操作光标和选区”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


    当前文章:JavaScript中怎么操作光标和选区
    本文链接:http://cdxtjz.cn/article/poeise.html

    其他资讯