操作范围中的内容

在创建范围时,内部会为这个范围创建一个文档片段

范围所属的全部节点都会被添加到这个片段中

虽然选取范围可以不是完整的、良好的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()方法来确定范围是否有公共边界

该方法接收两个参数:

  1. 表示比较方式的常量:
    1. Range.START_TO_START(0) 比较两个范围的起点
    2. Range.START_TO_END(1) 比较第一个起点和第二个终点
    3. Range.END_TO_END(2); 比较两个范围的终点
    4. Range.END_TO_START(3) 比较第一个终点和第二个起点
  2. 要比较的范围

该方法对于第一个点在第二个比较的点之前返回-1

两个点相同返回 0

第一个在第二个之后返回1

其它

复制DOM范围

var newRange = range.cloneRange();

清理DOM范围

range.detach();//从文档中分离
range = null;//解除引用

    

Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围的更多相关文章

  1. Javascript高级编程学习笔记(82)—— 富文本操作(2)

    操作富文本 与富文本编辑器的交互的主要方式就是使用 document.execCommand() 方法 该方法可以对文档执行自定义命令,并且可以应用大多数格式 该方法接收三个参数: 要执行命令的名称 ...

  2. Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

    DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...

  3. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  4. Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历

    遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...

  5. Javascript高级编程学习笔记(54)—— DOM2和DOM3(6)范围选择

    范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以 ...

  6. Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小

    在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...

  7. Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式

    样式 在HTML中定义元素的方式有以下三种: 1.link标签引入外部样式表 2.style标签定义嵌入样式 3.通过JS中对style特性定义元素样式(行内样式) “DOM2级样式”围绕上述样式机制 ...

  8. Javascript高级编程学习笔记(56)—— DOM2和DOM3(8)低版本IE范围

    虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body ...

  9. Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表

    操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...

随机推荐

  1. 手工脱壳之FSG压缩壳-IAT表修复

    目录 一.工具及壳介绍 二.脱壳 2.1.单步跟踪脱壳 2.2.IAT修复 三.程序脱壳后运行截图 四.个人总结 五.附件 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.L ...

  2. php操作redis数据库方法总结

    一.安装php_redis扩展,用以操作redis http://pecl.php.net/package/redis 选择自已系统php版本对应的扩展. 二.redis连接与验证 <?php ...

  3. 使用Snappy将html或者url转成PDF文件

    这是一个操作简单的html文件或者url转PDF的php库 Github地址 https://github.com/KnpLabs/snappy 安装: $ composer require knpl ...

  4. [Draft]iOS.ObjC.Pattern.Builder-Pattern

    Builder Pattern in Objective-C Reference 1. The Builder pattern in Objective-C Published on 04 Apr 2 ...

  5. day 1:计算机发展史和组成部分

    本节内容: 1,计算机的发展史 2,计算机的组成 1,计算机的发展史 1946年2月14日,由美国军方定制的世界上第一台电子计算机“电子数字积分计算机”(ENIAC Electronic Numeri ...

  6. windows 上安装冷门python模块

    最近在逼乎看到 笑虎大大 的python 撸代码学知识专栏..就下载他的Pspider 框架 安装了一下,准备耍耍. 由于是在Windows下的pycharm 有个 pybloom_live 模块 老 ...

  7. GarageBand mac怎么剪切音频片段? GarageBand mac使用教程

    garageband mac智能控制轻松修饰声音资源库中任何乐器的音色,让你在世界各地都可以开始你的创意,让世界听到你的歌声.GarageBand mac剪切音频片段的操作小伙伴们也是需要掌握的,Ga ...

  8. laravel-debugbar安装

    第一步:找到debugbar扩展包 扩展包的链接:https://packagist.org/packages/barryvdh/laravel-debugbar 第二步:安装 我测试的环境larav ...

  9. 【第一次作业】&&软件工程大一班---甘昀

    这个作业属于哪个课程: <课程的链接点这里>  这个作业要求在哪里: <作业要求的链接点这里> 我在这个课程的目标是:  学会软件开发的流程和思想 这个作业在哪个具体方面帮助我 ...

  10. 基于百词斩和扇贝单词的背单词APP软件测试

    概述 背单词APP是非常受大学生青睐的手机应用,但它的发展尚未成熟,存在一些缺陷.我们决定深入地分析一组典型的背单词APP:百词斩(A产品).扇贝单词(B产品),寻找当前背单词APP中的提升空间.下面 ...