保留在cloneNode()之后写入DOM对象的数据

Preserve data written to DOM object after cloneNode()

本文关键字:DOM 对象 数据 之后 cloneNode 保留      更新时间:2023-09-26

当我向dom节点对象写入(复杂)值时,当我在该节点上执行cloneNode时,该值将丢失,参见示例:http://codepen.io/anon/pen/ohGDy

是否有一种方法来保存这些数据与cloneNode()?

请记住,被克隆的节点以及被设置的值可能比示例复杂得多(例如:该值可以在被克隆节点的子节点上设置,可以是对象而不是字符串。

CloneNode复制一个htmlDomObject,一个htmlDomObject有html属性,它不像一个普通的javascript对象有属性。Javascript就是Javascript,它允许你给domObject分配一个属性,因为它可以让你做任何你想做的事情。

然而,cloneNode专门处理domObject和domObject不能有字符串属性,如果你做typeof foo.bar,你会看到它确实是一个字符串类型。

我把你的代码改成了:

var foo = document.getElementById("foo");
foo.setAttribute('bar', 'foobar');
var foo2 = foo.cloneNode(true);
document.write("foo: " + foo.getAttribute('bar') + "<br>");
document.write("foo2: " + foo2.getAttribute('bar'));

对于两者它都打印出foobar,因此您可以看到节点上设置的html属性被cloneNode复制。

编辑代码:http://codepen.io/anon/pen/Ltiov