关于DOM范围

Posted xhqb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于DOM范围相关的知识,希望对你有一定的参考价值。

DOM范围主要用于选择文档中的特定部分,用于删除,插入等操作

创建范围

document.createRange()

<div id="box">
  <p>hellohello<i>world</i></p>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</
div>

实现简单选择主要有两种方法

1.selectNode()

var range1 = document.createRange();
range1.selectNode(box);
//选择的范围从<div>到</div>

2.selectNodeContents()

var range2 = document.createRange();
range2.selectNodeContents(box);
//选择的范围从<p>前面的文本节点 到 <ul/>后面的文本节点,就是<div></div>里面的所有内容

 实现复杂选择需要配合两个方法

1.setStart(参照节点,偏移量)

2.setEnd(参照节点,偏移量)

var range3 = document.createRange(),
box = document.querySelector(‘#box‘), hello = box.childNodes[1].firstChild,//拿到了hellohello li1 = box.childNodes[3].childNodes[1].firstChild;//拿到了第一个li的文本节点"1"
range3.setStart(hello,5);//"hellohello"的第五位为起始点 range3.setEnd(li1,1);//"1"为结束点

操作范围中的内容有三个方法

1.deleteContents()

range3.deleteContents();//从文档中删除范围

结果如下图

技术分享图片技术分享图片

2.extractContents()

var m = range3.extractContents();//从文档中删除范围,会返回被删除的内容
box.appendChild(m);//将被删除的内容插入到其他地方

结果如下图

技术分享图片技术分享图片

 

3.cloneContents()

var m = range3.cloneContents();//创建一个副本,并返回这个副本
box.appendChild(m);//将副本插入到其他地方

结果如下图

技术分享图片技术分享图片

在范围中插入内容可以使用insertNode()方法

var newSpan = document.createElement(‘span‘);
newSpan.innerhtml = ‘新的内容‘;
newSpan.style.color = "red";
range3.insertNode(newSpan);

var m = range3.cloneContents();
box.appendChild(m);

结果如下图

技术分享图片技术分享图片

高亮范围中的某部分可以使用surroundContents()方法

var  range3 = document.createRange(),
box = document.querySelector(‘#box‘), hello = box.childNodes[1].firstChild;
range3.selectNode(hello);//选择高亮的部分 var newSpan = document.createElement(‘span‘); newSpan.style.backgroundColor = "red"; range3.surroundContents(newSpan);

结果如下图

技术分享图片技术分享图片

被选择的范围被加上了span标签并改变了背景颜色

复制DOM范围可以使用cloneRange()

var newRange = range3.cloneRange();

 使用完范围后,应该调用detach()方法解除引用

range3.detach();
range3 = null ;

 










以上是关于关于DOM范围的主要内容,如果未能解决你的问题,请参考以下文章

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

jQuery的DOM操作

关于React中的虚拟DOM与Diff算法

JavaScript单行代码,也就是代码片段

保留对附加节点 javascript 的引用

实用代码片段将json数据绑定到html元素 (转)