Javascript HTMLElement.cloneNode不';t复制DOM级别3事件
我有一些使用Javascript HTMLElement.cloneNode不';t复制DOM级别3事件,javascript,dom,javascript-events,Javascript,Dom,Javascript Events,我有一些使用cloneNode的代码。我有一个类似于标记的DOM容器。当我希望将新项附加到此容器时,我希望克隆该容器并将新元素附加到克隆的容器而不是原始容器。最后,我将用文档中的克隆替换原始文档 但是当我实现这个时,我发现克隆对象不会复制DOM级别3事件。我可以复制DOM级别3事件吗?如果不是,我必须重新绑定所有事件旧项,replaceChild方法是否会导致内存泄漏 var temp = this.element.cloneNode(true), children = this.chi
cloneNode
的代码。我有一个类似于
标记的DOM容器。当我希望将新项附加到此容器时,我希望克隆该容器并将新元素附加到克隆的容器而不是原始容器。最后,我将用文档中的克隆替换原始文档
但是当我实现这个时,我发现克隆对象不会复制DOM级别3事件。我可以复制DOM级别3事件吗?如果不是,我必须重新绑定所有事件旧项,replaceChild
方法是否会导致内存泄漏
var temp = this.element.cloneNode(true),
children = this.children,
len = this.children.length;
for (var i = 0, length = newChildren.length; i < length; i++) {
children.push(newChildren[i]);
temp.appendChild(newChildren[i].element);
}
if (this.element.parentNode)
this.element.parentNode.replaceChild(temp, this.element);
this.element = temp;
var ch = temp.firstChild;
children[0].element = ch;
var j = 0;
while (ch = ch.nextSibling) {
j++;
if (j > len)
children[j].element = ch;
}
var temp=this.element.cloneNode(真),
children=this.children,
len=this.children.length;
for(var i=0,length=newChildren.length;ilen)
children[j].element=ch;
}
您是指事件侦听器吗?它们从来都不可复制。为什么要替换整个容器?只需添加一个新元素。@Bergi:如果添加新元素,我认为添加几个元素可以,但如果元素太多,这是一件坏事。不。如果有什么区别的话,那么“许多元素”是坏事,而不是它们的附加。克隆完整的容器肯定比克隆多个附件更糟糕。如果你真的在乎,构建一个DOMFragment并附加它。然而,如果你需要的话,可能还有其他的问题。添加新元素而不进行克隆和替换也只能进行一次回流。