当我向dom节点对象写入(复杂)值时,当我在节点上执行cloneNode时,该值会丢失,请参阅示例:http://codepen.io/anon/pen/ohGDy
有没有办法用cloneNode()保存这些数据?
请记住,被克隆的节点以及正在设置的值都可能比示例复杂得多(即,可以在被克隆的节点的子节点上设置该值,并且可以是对象而不是一个字符串)。
答案 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复制。