【问题标题】:JavaScript: cloneNode vs importNodeJavaScript:cloneNode 与 importNode
【发布时间】: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


【解决方案1】:

在 DOM3 及更早版本中,importNode 用于从其他文档复制节点,cloneNode 用于在同一文档中复制。但是浏览器不强制这样做,所以在最新的DOM standardcloneNode 中可以用来从不同的文档中复制。在其他情况下使用 DOM 时,请遵守 DOM3 规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多