Range:cloneContents() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Range 接口的 cloneContents() 方法会复制范围的 commonAncestorContainer 的所选 Node 子项,并将它们放入一个新的 DocumentFragment 对象中。

节点使用与 Node.cloneNode() 相同的算法进行克隆,这意味着通过脚本附加的事件监听器不会被克隆。HTML id 属性会被克隆,这可能导致克隆后文档无效。

commonAncestorContainer 的第一个和最后一个被选中的子项可能是部分选中的。在这种情况下,子节点本身会被克隆,但其内容仅限于被选中的部分,这是通过递归克隆原始范围的开始/结束边界与该子节点的结束/开始边界之间的范围来实现的。

<p>paragraph 1</p><p>paragraph 2</p><p>paragraph 3</p>
       ^----------- selection ------------^

cloneContents() returns:

<p>graph 1</p><p>paragraph 2</p><p>para</p>

语法

js
cloneContents()

参数

无。

返回值

一个 DocumentFragment 对象。

示例

js
range = document.createRange();
range.selectNode(document.getElementsByTagName("div").item(0));
documentFragment = range.cloneContents();
document.body.appendChild(documentFragment);

规范

规范
DOM
# dom-range-clonecontents

浏览器兼容性

另见