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

时间:2014-06-30 21:53:10

标签: javascript dom

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

有没有办法用cloneNode()保存这些数据?

请记住,被克隆的节点以及正在设置的值都可能比示例复杂得多(即,可以在被克隆的节点的子节点上设置该值,并且可以是对象而不是一个字符串)。

1 个答案:

答案 0 :(得分:2)

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

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

我将您的代码更改为:

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