DOM 节点的克隆和导入

简介: 在使用 JS 操作 DOM 节点的时候,我们常常会用到克隆(或导入)节点的操作,那到底有哪些方法可以实现节点克隆(或导入)的效果呢?

17.png


前言


在使用 JS 操作 DOM 节点的时候,我们常常会用到克隆(或导入)节点的操作,那到底有哪些方法可以实现节点克隆(或导入)的效果呢?


今天,我们就来总结一下能实现节点克隆(或导入)效果的方法。


node.cloneNode()


提到克隆节点,我们最先能想到的肯定是 node.cloneNode() 方法。


语法


其语法如下:


let cloneNode = targetNode.cloneNode(deep);


  • cloneNode  最终克隆生成的节点副本。
  • targetNode   将要被克隆的目标节点。
  • deep   可选参数,表示是否需要进行深度克隆,即是否需要克隆 targetNode 下的子节点,默认为 false。


举例:


<body>
    <div id="container">
        <div class="header">这是头部</div>
        <div class="body">
            <div class="content">内容一</div>
            <div class="content">内容二</div>
        </div>
    </div>
    <script>
        const target = document.querySelector(".body");
        const cloneNode1 = target.cloneNode();
        console.log("cloneNode1.outerHTML\n\n",cloneNode1.outerHTML);
        const cloneNode2 = target.cloneNode(true);
        console.log("cloneNode2.outerHTML\n\n", cloneNode2.outerHTML);
    </script>
</body>


运行结果如下:


15.png


document.importNode()


将外部文档的一个节点拷贝一份,然后可以把这个拷贝的节点插入到当前文档中。语法如下:


let node = document.importNode(externalNode, deep);


  • node 从外部导入到当前文档的节点对象。
  • externalNode 外部文档中将要被导入的目标节点。
  • deep 是否深拷贝,默认为 false。


举例:


<!--iframe.html-->
<body>
    <h1>这是 Iframe 页面</h1>
    <div id="container">
        <div class="header">这是 Iframe 内容头部</div>
        <div class="body">这是 Iframe 内容主体</div>
    </div>
</body>
<!--index.html-->
<body>
    <div id="container">
        <div class="header">内容头部</div>
        <div class="body">内容主体</div>
    </div>
    <iframe id="iframe_ele" src="./iframe.html"></iframe>
    <script>
        window.onload = function () {
            const iframeEle = document.getElementById('iframe_ele');
            const iframeContainer = iframeEle.contentDocument.getElementById("container");
            const importedNode = document.importNode(iframeContainer, true);
            document.body.appendChild(importedNode);
        }
    </script>
</body>


最终效果如下:


14.png


document.adoptNode()


从其他的document文档中获取一个节点。 该节点以及它的子树上的所有节点都会从原文档删除 (如果有这个节点的话), 并且它的ownerDocument 属性会变成当前的document文档。 之后你可以把这个节点插入到当前文档中。语法:


let node = document.adoptNode(externalNode);
  • node 从外部文档中获取到的节点对象。
  • externalNode 将要被导入的外部文档中的节点对象。


举例:


<!--iframe.html-->
<body>
    <h1>这是 Iframe 页面</h1>
    <div id="container">
        <div class="header">这是 Iframe 内容头部</div>
        <div class="body">这是 Iframe 内容主体</div>
    </div>
</body>
<!--index.html-->
<body>
    <div id="container">
        <div class="header">内容头部</div>
        <div class="body">内容主体</div>
    </div>
    <iframe id="iframe_ele" src="./iframe.html"></iframe>
    <script>
        window.onload = function () {
            const iframeEle = document.getElementById('iframe_ele');
            const iframeContainer = iframeEle.contentDocument.getElementById("container");
            const node = document.adoptNode(iframeContainer);
            document.body.appendChild(node);
        }
    </script>
</body>


效果:


13.png


总结


以上就是使用 JS 克隆(或导入)DOM 节点的方法总结。


~ 本文完,感谢阅读!


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!




相关文章
|
10天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法用于访问 XML 文档中的特定节点。该方法返回一个节点列表,相当于节点数组,可用来遍历和导航节点树。例如,加载 &quot;books.xml&quot; 到 xmlDoc 后,`x = xmlDoc.getElementsByTagName(&quot;book&quot;)` 将获取所有 `&lt;book&gt;` 节点。
|
5天前
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,即节点数量。通过遍历这个属性,可以访问和处理所有节点。例如,示例代码加载&quot;books.xml&quot;,获取所有&quot;title&quot;节点,并依次输出它们的第一个子节点的值。
|
9天前
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,代码加载&quot;books.xml&quot;,然后通过`getElementsByTagName(&quot;title&quot;)`获取所有标题节点。使用`for`循环遍历这些节点,输出每个标题的文本内容。
|
2天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过循环移动,可以访问并处理每个节点,例如提取元素值。示例代码展示了一个实例,它加载XML字符串到`xmlDoc`,然后遍历根元素的所有子节点,打印出节点名及文本值。在输出中,可以看到对&quot;title&quot;, &quot;author&quot;和&quot;year&quot;节点的处理。
|
2天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法用于访问 XML 文档中的特定节点。此方法返回一个节点列表,相当于节点数组,可用来遍历和导航节点树。例如,加载 &quot;books.xml&quot; 到 xmlDoc 后,`x = xmlDoc.getElementsByTagName(&quot;book&quot;)` 将获取所有 `&lt;book&gt;` 节点,允许进一步处理每个节点。
|
4天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了XML DOM遍历节点树的概念,通过循环移动遍历文档,以提取各元素值。示例代码展示了如何加载XML到xmlDoc,获取根元素子节点并打印其名称和值,例如:`title: Everyday Italian`, `author: Giada De Laurentiis`, `year: 2005`。
|
8天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法从 `xmlDoc` 加载 &quot;books.xml&quot;,返回一个节点列表。这个列表是不连续的节点数组,允许遍历和访问XML文档中的特定节点。通过节点关系及循环,可以在文档对象模型(DOM)中导航并访问每个节点。
|
7天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了XML文档对象模型(DOM)中的节点遍历。通过遍历节点树,可以循环访问XML文档的各个元素。示例代码展示如何遍历一个XML结构,打印出所有子节点的名称和值。在HTML中,XML字符串被加载到`xmlDoc`,然后获取根元素的子节点并逐一输出其信息。
|
14天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法用于获取 XML 文档中指定标签名的所有节点,返回一个节点列表,类似数组。可以循环遍历节点树或利用节点关系导航来访问每个节点。例如,加载 &quot;books.xml&quot; 到 xmlDoc 后,变量 x 存储了所有 `&lt;book&gt;` 节点的列表。
|
14天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法用于访问XML文档中的特定节点。节点可按三种方式获取:使用该方法、遍历节点树或导航节点关系。`getElementsByTagName()` 返回一个节点列表,类似数组,可用于处理多个匹配节点。例如,代码加载 &quot;books.xml&quot; 到 `xmlDoc`,再将结果保存到变量 `x`。