JavaScript 用cloneNode方法克隆節(jié)點(diǎn)的代碼
很多時(shí)候我們會(huì)用for 來(lái)生成多個(gè)結(jié)構(gòu)相同的節(jié)點(diǎn)結(jié)構(gòu),這樣我們需要寫(xiě)很多createElement、setAttribute、appendChild 等代碼。
但其實(shí)我們只需要有一個(gè)html 的模板,就可以用cloneNode 方法對(duì)已有的節(jié)點(diǎn)進(jìn)行克隆,包括其子節(jié)點(diǎn)。
以下是cloneNode 方法原型:
newElement oldElement.cloneNode(bool deep);
這個(gè)方法只有一個(gè)參數(shù)deep,布爾值,如果為true,則克隆oldElement 這個(gè)及其子節(jié)點(diǎn),否則只可能這個(gè)節(jié)點(diǎn)本身。
返回值就是一個(gè)克隆的節(jié)點(diǎn)newElement。
以下是測(cè)試代碼,test.htm 和test.js 文件。
<!-- test.htm -->
<html>
<head>
<title>Test of cloneNode Method</title>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<div id="main">
<div id="div-0">
<span>Cloud018 said, </span>
<span>"Hello World!!!"</span>
</div>
</div>
</body>
</html>
Code
// test.js
window.onload = function () {
var sourceNode = document.getElementById("div-0"); // 獲得被克隆的節(jié)點(diǎn)對(duì)象
for (var i = 1; i < 5; i++) {
var clonedNode = sourceNode.cloneNode(true); // 克隆節(jié)點(diǎn)
clonedNode.setAttribute("id", "div-" + i); // 修改一下id 值,避免id 重復(fù)
sourceNode.parentNode.appendChild(clonedNode); // 在父節(jié)點(diǎn)插入克隆的節(jié)點(diǎn)
}
}
網(wǎng)頁(yè)加載的結(jié)果如下:

用Google Chrome 的開(kāi)發(fā)人員工具可以看出,div-0 的節(jié)點(diǎn)結(jié)構(gòu)都被復(fù)制了。

而當(dāng)把cloneNode 的deep 參數(shù)設(shè)為false 的時(shí)候,僅僅div-0 這個(gè)節(jié)點(diǎn)本身被克隆,而他的子節(jié)點(diǎn)(即其內(nèi)容)是沒(méi)有被復(fù)制的。

- JS對(duì)象的深度克隆方法示例
- JS對(duì)象深度克隆實(shí)例分析
- JS擴(kuò)展類,克隆對(duì)象與混合類實(shí)例分析
- JavaScript 深層克隆對(duì)象詳解及實(shí)例
- js 數(shù)組克隆方法 小結(jié)
- javascript dom操作之cloneNode文本節(jié)點(diǎn)克隆使用技巧
- JavaScript 克隆數(shù)組最簡(jiǎn)單的方法
- JavaScript數(shù)組的快速克隆(slice()函數(shù))和數(shù)組的排序、亂序和搜索(sort()函數(shù))
- javascript淺層克隆、深度克隆對(duì)比及實(shí)例解析
相關(guān)文章
js實(shí)現(xiàn)簡(jiǎn)易垂直滾動(dòng)條
本文主要介紹了js實(shí)現(xiàn)簡(jiǎn)易垂直滾動(dòng)條的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02js中的值類型和引用類型小結(jié) 文字說(shuō)明與實(shí)例
下面就舉例講一下這兩種類型在JavaScript中的體現(xiàn)、用法及注意事項(xiàng)。2010-12-12解決axios會(huì)發(fā)送兩次請(qǐng)求,有個(gè)OPTIONS請(qǐng)求的問(wèn)題
這篇文章主要介紹了解決axios會(huì)發(fā)送兩次請(qǐng)求,有個(gè)OPTIONS請(qǐng)求的問(wèn)題,需要的朋友可以參考下2018-10-10js實(shí)現(xiàn)對(duì)ajax請(qǐng)求面向?qū)ο蟮姆庋b
這篇文章主要介紹了js實(shí)現(xiàn)對(duì)ajax請(qǐng)求面向?qū)ο蟮姆庋b的相關(guān)資料,需要的朋友可以參考下2016-01-01javaScript實(shí)現(xiàn)滾動(dòng)新聞的方法
這篇文章主要介紹了javaScript實(shí)現(xiàn)滾動(dòng)新聞的方法,涉及javascript實(shí)現(xiàn)頁(yè)面滾動(dòng)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07XDomainRequest之IE8和IE9發(fā)送跨域請(qǐng)求拒絕訪問(wèn)解決方法
這篇文章主要介紹了XDomainRequest之IE8和IE9發(fā)送跨域請(qǐng)求拒絕訪問(wèn)解決方法,需要的朋友可以參考下2023-06-06JavaScript中關(guān)于字符串替換與截取的知識(shí)點(diǎn)匯總
在日常開(kāi)發(fā)中,經(jīng)常遇到針對(duì)字符串的替換、截取,知識(shí)點(diǎn)比較碎容易混淆,所以本文為大家整理了一下相關(guān)的知識(shí)點(diǎn),希望對(duì)大家有所幫助2023-05-05Javascript中prototype屬性實(shí)現(xiàn)給內(nèi)置對(duì)象添加新的方法
這篇文章主要介紹了Javascript中prototype屬性實(shí)現(xiàn)給內(nèi)置對(duì)象添加新的方法,涉及javascript中prototype屬性的使用技巧,需要的朋友可以參考下2015-05-05淺談Javascript數(shù)據(jù)屬性與訪問(wèn)器屬性
下面小編就為大家?guī)?lái)一篇淺談Javascript數(shù)據(jù)屬性與訪問(wèn)器屬性。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07