Node.cloneNode

概述

返回调用该方法的节点的一个副本.

语法

var dupNode = node.cloneNode(deep);
node
将要被克隆的节点
dupNode
克隆生成的副本节点
deep 可选
是否采用深度克隆,如果为true,则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身.

注意: 在DOM4规范中(实现于Gecko 13.0(Firefox 13.0 / Thunderbird 13.0 / SeaMonkey 2.10) , 查看 bug 698391),deep是一个可选参数. 如果省略的话, deep参数的默认值为true,也就是说,深度克隆是默认的.如果想使用浅克隆, 你需要将该参数指定为false.

在旧版本的浏览器中, 你始终需要指定deep参数.

示例

var p = document.getElementById("para1"),
var p_prime = p.cloneNode(true);

附注

克隆一个元素节点会拷贝它所有的属性以及属性值,当然也就包括了属性上绑定的事件(比如onclick="alert(1)"),但不会拷贝那些使用addEventListener()方法或者node.onclick = fn这种用JavaScript动态绑定的事件.

在使用Node.appendChild()或其他类似的方法将拷贝的节点添加到文档中之前,那个拷贝节点并不属于当前文档树的一部分,也就是说,它没有父节点.

如果deep参数设为false,则不克隆它的任何子节点.该节点所包含的所有文本也不会被克隆,因为文本本身也是一个或多个的Text节点.

如果deep参数设为true,则会复制整棵DOM子树(包括那些可能存在的Text子节点).对于空结点(例如<img><input>元素),则deep参数无论设为true还是设为false,都没有关系,但是仍然需要为它指定一个值.

注意:为了防止一个文档中出现两个ID重复的元素,使用cloneNode()方法克隆的节点在需要时应该指定另外一个与原ID值不同的ID

如果原始节点设置了ID,并且克隆节点会被插入到相同的文档中,那么应该更新克隆节点的ID以保证唯一性。name属性可能也需要进行修改,取决于你是否希望有相同名称的节点存在于文档中。

想要克隆一个节点来添加到另外一个文档中,请使用Document.importNode()代替本方法.

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
deep as an optional parameter

Yes

(default is false)

13.0 (13.0) ? ?

Yes

(default is false)

Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
deep as an optional parameter ? ? 13.0 (13.0) ? ? ?

规范

文档标签和贡献者

标签: 
向此页面作出贡献: teoli, AshfaqHossain, ziyunfei, manjun.han, TigerSoldier
最后编辑者: AshfaqHossain,