Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围
操作范围中的内容
在创建范围时,内部会为这个范围创建一个文档片段
范围所属的全部节点都会被添加到这个片段中
虽然选取范围可以不是完整的、良好的DOM结构
但是在这个为范围创建的文档片段中,会自己完缺少的闭合标签,以此构建有效的DOM结构来方便我们操作
上述步骤都是内部实现的,因此我们可以不用过多地关注这一方面
首先是 deleteContents()
这个方法会从文档中删除选中范围的内容
以下方的HTML代码为例
<p id = "p1"><b>hello</b>world!</p>
使用deleteContents()方法:
var p1 = document.getElementById("p1");
var helloNode = p1.firstChild.firstChild;
var worldNode = p1.lastChild;
var range = document.createRange(); range.setStart(helloNode,2);
range.setEnd(worldNode,3); range.deleContents();
此后文档中的内容如下
<p id = "p1"><b>he</b>rld!</p>
由于在底层实现中JS会自动完整没有闭合的标签,所以能保有一个良好的文档结构
然后就是 extractContents()方法
这个方法和 delete Contents()方法一样都会从文档中移除范围内容
但是有所区别
这个方法会返回被移除的范围中的内容
此外 cloneContents() 方法用于复制范围中的节点
和 extractContents() 一样都会返回节点,只不过这里返回的不是实际节点
而是实际节点的副本
我们可以使用 appendChild()方法将其重新插入文档中
PS.在调用上述的操作范围的方法之前,范围中的内容并不会产生格式良好的文档片段
向范围中插入内容
首先是 insertNode()方法,可以向范围的开始处插入一个节点
例如:
var p1 = document.getElementById("p1");
var helloNode = p1.firstChild.firstChild;
var worldNode = p1.lastChild;
var range = document.createRange(); range.setStart(helloNode,2);
range.setEnd(worldNode,3); var span = document.createElement("span");
span.style.color = "red";
span.appendChild(document.createTextNode("Inserted text"));
range.insertNode(span);
运行后会得到以下文档结构
<p id = "p1"><b>he<spand style="color:red">Interted text</span>llo</b>world!</p>
此外还有一个方法 surroundContents()用于环绕范围插入内容
一般来说用于为范围添加特殊样式
折叠DOM范围
折叠是指范围没有选中内容的情况,就相当于用鼠标选择文字时的光标竖线一样
该情况储存在range 的 collapsed 属性中
range.collapsed
可以用于判断两个节点十分紧密相邻
比较范围
在有多个范围的情况下,可以使用 compareBoundaryPoints()方法来确定范围是否有公共边界
该方法接收两个参数:
- 表示比较方式的常量:
- Range.START_TO_START(0) 比较两个范围的起点
- Range.START_TO_END(1) 比较第一个起点和第二个终点
- Range.END_TO_END(2); 比较两个范围的终点
- Range.END_TO_START(3) 比较第一个终点和第二个起点
- 要比较的范围
该方法对于第一个点在第二个比较的点之前返回-1
两个点相同返回 0
第一个在第二个之后返回1
其它
复制DOM范围
var newRange = range.cloneRange();
清理DOM范围
range.detach();//从文档中分离
range = null;//解除引用
Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围的更多相关文章
- Javascript高级编程学习笔记(82)—— 富文本操作(2)
操作富文本 与富文本编辑器的交互的主要方式就是使用 document.execCommand() 方法 该方法可以对文档执行自定义命令,并且可以应用大多数格式 该方法接收三个参数: 要执行命令的名称 ...
- Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历
遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...
- Javascript高级编程学习笔记(54)—— DOM2和DOM3(6)范围选择
范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以 ...
- Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小
在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...
- Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式
样式 在HTML中定义元素的方式有以下三种: 1.link标签引入外部样式表 2.style标签定义嵌入样式 3.通过JS中对style特性定义元素样式(行内样式) “DOM2级样式”围绕上述样式机制 ...
- Javascript高级编程学习笔记(56)—— DOM2和DOM3(8)低版本IE范围
虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body ...
- Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表
操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...
随机推荐
- MVC Request生命周期(综合总结)
当用户在浏览器输入一个URL地址后,浏览器会发送一个请求到服务器.这时候在服务器上第一个负责处理请求的是IIS.然后IIS再根据请求的URL扩展名将请求分发给不同的处理程序处理. 流程如下: 当请求一 ...
- zabbix的api接口
zabbix官方文档解释,api是开发者能获得修改zabbix配置,获取历史数据.主要用于: 1.创建新应用 2.集成zabbix与第三方软件 3.自动运行任务 运用JSON-RPC2.0协议,因此接 ...
- Samtools在Linux上非root权限的安装
第一次在Linux上不用root权限安装软件,查看了很多博客,并实践安装成功.大致总结了一下samtools的安装过程,仅供大家参考,如有不对的地方,欢迎指正~ samtools安装过程中依赖于lzm ...
- 弹飞绵羊[HNOI2010]
--BZOJ2002 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线 ...
- 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。
升级 vs201715.6.3之后发布出现 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标.确保已运行还原,且 ...
- Android自动化之Monkey环境搭建(一)
从事测试行业两年了,一直很喜欢研究新技术,但是最近有点慵懒.正好公司新出了产品,督促我学习monkey用来测其稳定性. 网上搜索了很久,内容总是很零散,通常需要找几篇文章才能搭好环境.特写此文,一篇文 ...
- eclipse汉化包
把eclipse英文汉化成中文,首先我们要知道自己安装的eclipse版本,可以在eclipse的安装目录下找到readme用浏览器打开查看版本,或者用记事本打开.eclipseproduct文件,查 ...
- AX_RecordSortedList
static void RecordSortedList(Args _args) { SalesLine localSalesLine,fetchSalesLine; RecordSortedList ...
- spring boot 注解
一级注解:(写在类名前面的)@RestController: 等价于在函数前面写@ResponseBody ,会直接返回要显示的内容 @ControllerString返回的是模板文件的名称. 二级注 ...
- 山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard
山东省ACM多校联盟省赛个人训练第六场 D Rotating Scoreboard https://vjudge.net/problem/POJ-3335 时间限制:C/C++ 1秒,其他语言2秒 空 ...