文档:importNode() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Document 对象的 importNode() 方法用于从另一个文档创建一个 NodeDocumentFragment 的副本,以便稍后插入到当前文档中。

导入的节点尚未包含在文档树中。要包含它,您需要调用一个插入方法,例如 appendChild()insertBefore(),并传入一个当前在文档树中的节点。

document.adoptNode() 不同,原始节点不会从其原始文档中移除。导入的节点是原始节点的克隆。

语法

js
importNode(externalNode)
importNode(externalNode, deep)

参数

externalNode

要导入到当前文档中的外部 NodeDocumentFragment

deep 可选

一个布尔标志,其默认值为 false,用于控制是否将 externalNode 的整个 DOM 子树包含在导入中。

  • 如果 deep 设置为 true,则会复制 externalNode 及其所有后代节点。
  • 如果 deep 设置为 false,则只导入 externalNode——新节点没有子节点。

返回值

导入文档作用域中复制的 importedNode

注意: importedNodeNode.parentNodenull,因为它尚未被插入到文档树中!

示例

js
const iframe = document.querySelector("iframe");
const oldNode = iframe.contentWindow.document.getElementById("myNode");
const newNode = document.importNode(oldNode, true);
document.getElementById("container").appendChild(newNode);

注意

在将外部文档的节点插入到当前文档之前,它们应该被

  • 使用 document.importNode() 克隆;或者
  • 使用 document.adoptNode() 采用。

注意: 尽管 Firefox 目前没有强制执行此规则,但为了提高未来兼容性,我们建议您遵守此规则。

有关 Node.ownerDocument 问题的更多信息,请参阅 W3C DOM FAQ。

规范

规范
DOM
# ref-for-dom-document-importnode①

浏览器兼容性

另见