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

Javascript 在cloneNode()之后保留写入DOM对象的数据,javascript,dom,Javascript,Dom,当我向dom节点对象写入(复杂)值时,在节点上执行克隆节点时,该值丢失,请参见示例: 有没有办法用cloneNode()保存此数据 请记住,正在克隆的节点和正在设置的值可能比示例复杂得多(即,值可能在正在克隆的节点的子节点上设置,并且可能是对象而不是字符串)。CloneNode复制HTMLDOObject,htmlDomObject具有html属性,但不像普通javascript对象那样具有属性。Javascript是Javascript,它允许您为domObject分配一个属性,因为它可以让您

当我向dom节点对象写入(复杂)值时,在节点上执行克隆节点时,该值丢失,请参见示例:

有没有办法用cloneNode()保存此数据


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

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

但是,cloneNode专门处理domObjects,并且domObject不能有string属性,如果您使用
typeof foo.bar
,您将看到它确实是一个typeof string属性

我将您的代码更改为:

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'));
var foo=document.getElementById(“foo”);
setAttribute('bar','foobar');
var foo2=foo.cloneNode(真);
document.write(“foo:”+foo.getAttribute('bar')+“
”); document.write(“foo2:+foo2.getAttribute('bar'));
对于这两种情况,它都会打印出
foobar
,因此您可以看到节点上设置的html属性是由cloneNode复制的


编辑的代码笔:

正确,这对简单值很有效,但对复杂值无效。除非您想开始编码/解码值。我想知道的是,是否有一种方法可以将自定义属性写入html dom对象。@Naatan不适用于标准html。但是有办法解决这个问题,angular和ember就是这么做的。它们将复杂值(模型)与dom元素相关联。