【发布时间】:2017-04-02 19:50:47
【问题描述】:
我在一些代码示例中注意到克隆 DOM 节点并将其附加到现有元素的看似不同的方法:
element.appendChild(something.cloneNode(true));
element.appendChild(document.importNode(something, true));
两者都具有复制节点的效果。第二个版本似乎更冗长,并暗示该副本实际上首先是具体的某个地方,尽管它仍然需要找到一个合适的归宿。但是,它被 MDN 和其他一些人用作使用 template 标签的说明。在其他地方,他们选择更简单的 clodeNode 选项。
问题是:使用importNode 比使用cloneNode 有什么好处?
【问题讨论】:
-
developer.mozilla.org/en-US/docs/Web/API/Document/… 导致w3.org/DOM/faq.html#ownerdoc。从不同的 DOM 复制元素时,应使用
importNode,以避免出现不同的 DOM 行为问题。 -
@Kaiido 这与
cloneNode有何不同? -
仅参考我对先前链接的理解,
importNode,新文档将使克隆节点成为他的,(共享其 DOM 方法和可能的名称空间等),而 @987654332 @,克隆的节点仍然有externalDocument的API。 -
在 DOM3 及更早版本中,importNode 用于从其他文档复制节点,cloneNode 用于在同一文档中复制。但是浏览器不强制这样做,所以在latest DOM standardcloneNode 中可以用来从不同的文档中复制。在其他情况下使用 DOM 时,请遵守 DOM3 规则。
-
@Alohci 如果我理解正确的话,想法 是 两者都会从同一个文档中克隆一个节点,但
importNode也会从不同的文档中克隆。但是,现在我可以选择其中之一吗?你能把它变成一个答案让我接受吗?
标签: javascript dom clonenode