Selection与Range 对象操作示例指南

 更新时间:2022年09月01日 09:59:24   作者:yangcrazy30  
这篇文章主要为大家介绍了Selection与Range 对象操作示例指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

有些时候我们需要能够通过JavaScript访问页面的当前选择,已达成选择(取消选择)部分节点以从文档中删除所选内容或像文档中插入某些新内容。我们需要RangeSelction对象已达成我们的目的。

Range

选择的基本概念是Range,其本质是一对‘边界点’:范围起点和范围终点

我们可以通过Range对象来操作选择

    // 可以不传任何参数创建Range对象
    let range = new Range()
    
    // 可以通过设置开始和结束边界点来进行选择
    // 指定开始点
    range.setStart(node, offset)
    // 指定最大范围但不包括offset
    range.setEnd(node, offset)

选择部分文本

setStartsetEnd方法的第一个参数node可以是文本节点也可以是元素节点

node是文本节点时,offset则必须是其文本中的位置

<p id="p">Hello</p> 
<script> 
let range = new Range(); 
range.setStart(p.firstChild, 2); 
range.setEnd(p.firstChild, 4); 
</script>

选择dom元素节点

node是元素节点时,offset则必须是子元素的索引编号

当我们有如下dom结构并且以p为node节点时,对应的offset如图所示

<p>Test: <i>test1</i> and <b>test2</b> </p>
   | 0   |   1      | 2  |     3     |

range对象属性

我们在上面的示例中创建的 range 对象具有以下属性:

startContainerstartOffset —— 起始节点和偏移量,

endContainerendOffset —— 结束节点和偏移量,

collapsed —— 布尔值,如果范围在同一点上开始和结束(所以范围内没有内容)则为 true

commonAncestorContainer —— 在范围内的所有节点中最近的共同祖先节点,

编辑范围的方法

deleteContents() —— 从文档中删除范围中的内容

extractContents() —— 从文档中删除范围中的内容,并将删除的内容作为 DocumentFragment 返回

cloneContents() —— 复制范围中的内容,并将复制的内容作为 DocumentFragment 返回

insertNode(node) —— 在范围的起始处将 node 插入文档

surroundContents(node) —— 使用 node 将所选范围中的内容包裹起来。要使此操作有效,则该范围必须包含其中所有元素的开始和结束标签:不能像 <i>abc 这样的部分范围。

更多API

更多API及详细参数见 MDN Range

Selection

Range是用来管理选择范围的通用对象,但是新建一个Range对象并不一定会在文档上创建一个选择。 Selection对象是用来获取文档选择的。可以通过winodw.getSelection()document.getSelection()来获取。一个选择可以包括零个或多个范围,但实际上除firefox允许同时选择多个范围,其他浏览器最多只能选择一个范围。

selection的属性

如前所述,理论上一个选择可能包含多个范围。我们可以使用下面这个方法获取这些范围对象:

getRangeAt(i) —— 获取第 i 个范围,i 从 0 开始。在除 Firefox 之外的所有浏览器中,仅使用 0

与范围类似,选择的起点被称为“锚点(anchor)”,终点被称为“焦点(focus)”。

主要的选择属性有:

anchorNode —— 选择的起始节点,

anchorOffset —— 选择开始的 anchorNode 中的偏移量,

focusNode —— 选择的结束节点,

focusOffset —— 选择开始处 focusNode 的偏移量,

isCollapsed —— 如果未选择任何内容(空范围)或不存在,则为 true 。

rangeCount —— 选择中的范围数,除 Firefox 外,其他浏览器最多为 1

selection锚点和焦点与range开始结束点的区别

selection的锚点可在选择的焦点之后,以表达从右向左选择,而range的开始点必须在结束点之前

selection API

更多详细API及其参数见 MDN Selection

以上就是Selection与Range 对象操作示例指南的详细内容,更多关于Selection Range 对象操作的资料请关注脚本之家其它相关文章!

相关文章

  • JS轻量级函数式编程实现XDM三

    JS轻量级函数式编程实现XDM三

    这篇文章主要为大家介绍了JS轻量级函数式编程实现XDM示例详解第3/3篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 在网页中控制wmplayer播放器

    在网页中控制wmplayer播放器

    在网页中控制wmplayer播放器...
    2006-07-07
  • js websocket断线重连实例代码

    js websocket断线重连实例代码

    这篇文章主要为大家介绍了js websocket断线重连实例代码详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 微信小程序 弹幕功能简单实例

    微信小程序 弹幕功能简单实例

    这篇文章主要介绍了微信小程序 弹幕功能简单实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • 微信小程序 Page()函数详解

    微信小程序 Page()函数详解

    这篇文章主要介绍了微信小程序 Page()函数详解的相关资料,在开发过程中肯定会遇到Page()函数,希望能帮助到大家,需要的朋友可以参考下
    2016-10-10
  • 微信小程序 实战实例开发流程详细介绍

    微信小程序 实战实例开发流程详细介绍

    这篇文章主要介绍了微信小程序 实战实例开发流程详细介绍的相关资料,这里主要介绍微信小程序的开发流程和简单实例,需要的朋友可以参考下
    2017-01-01
  • 微信小程序request出现400的问题解决办法

    微信小程序request出现400的问题解决办法

    这篇文章主要介绍了微信小程序request出现400的问题解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • JavaScript实现一个Promise队列小工具

    JavaScript实现一个Promise队列小工具

    这篇文章主要介绍了JavaScript实现一个Promise队列小工具,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 前端项目中监听localStorage的变化

    前端项目中监听localStorage的变化

    这篇文章主要为大家介绍了前端项目中监听localStorage的变化的解决思路详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 深入浅出探究JavaScript中的async与await

    深入浅出探究JavaScript中的async与await

    任意一个名称都是有意义的,先从字面意思来理解。async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。下文将带你深入探究JavaScript中的async与await
    2021-09-09

最新评论