JavaScript cloneNode() 克隆節點
cloneNode() 方法可以克隆一個節點,根據引數的不同進行淺拷貝或深拷貝。
下面會結合程式碼例項對此方法的使用進行詳細分析。
語法結構:
[JavaScript] 純文字檢視 複製程式碼Node.cloneNode(deep)
引數解析:
(1).Node:將要被克隆的節點。
(2).deep: 可選,布林值,預設值為 false,規定是否進行深度克隆,如果引數為 true,將克隆 Node 節點以及它的後代節點,如果引數為 false,只克隆 Node 節點本身。
瀏覽器支援:
(1).IE 瀏覽器支援此方法。
(2).edge 瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).opera 瀏覽器支援此方法。
(5).火狐瀏覽器支援此方法。
(6).safari 瀏覽器支援此方法。
程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:100px; height:100px; background-color:blue; margin:5px; } </style> <script> window.onload=function(){ let odiv=document.getElementsByTagName("div")[0]; let obt=document.getElementById("bt"); obt.onclick=function(){ let cloneNode=odiv.cloneNode(); document.body.appendChild(cloneNode); } } </script> </head> <body> <input type="button" id="bt" value="檢視演示"/> <div></div> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).點選按鈕後,首先會克隆div,cloneNode方法預設引數是false。
(2).然後通過appendChild方法將其追加到body中去。
cloneNode方法預設引數為false,採用淺克隆,也就是隻克隆Node節點本身。
程式碼演示如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:100px; height:100px; line-height:100px; text-align:center; background-color:blue; margin:5px; } </style> <script> window.onload=function(){ let odiv=document.getElementsByTagName("div")[0]; let obt=document.getElementById("bt"); obt.onclick=function(){ let cloneNode=odiv.cloneNode(); document.body.appendChild(cloneNode); } } </script> </head> <body> <input type="button" id="bt" value="檢視演示"/> <div>螞蟻部落</div> </body> </html>
程式碼執行效果截圖如下:
由於使用的是淺拷貝,所以只會拷貝div節點本身,它的後代節點並不會被一同拷貝。
對於<img>或者<input>等空元素,無所謂淺拷貝或者深拷貝,它們沒有子節點。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> .ant{ width:100px; height:100px; line-height:100px; text-align:center; background-color:blue; color:red; margin:5px; } </style> <script> window.onload=function(){ let odiv=document.getElementsByTagName("div")[0]; let obt=document.getElementById("bt"); obt.onclick=function(){ let cloneNode=odiv.cloneNode(true); document.body.appendChild(cloneNode); } } </script> </head> <body> <input type="button" id="bt" value="檢視演示"/> <div class="ant">螞蟻部落</div> </body> </html>
程式碼執行效果截圖如下:
被克隆的元素背景顏色依然是藍色,字型顏色同樣也是紅色。
這說明,元素的屬性同樣會被克隆,但是有例外:
(1).addEventListener註冊的事件處理函式不會被克隆。
(2).dom.onclick類似註冊的事件處理函式不會被克隆。
(3).<div>螞蟻部落</div>此種類似方式註冊的事件處理函式會被克隆。
還有一點需要注意,避免id屬性值重複,如果被克隆元素具有id屬性。
那麼新克隆的元素要修改一下屬性值,以避免出現此情況。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:100px; height:100px; line-height:100px; text-align:center; background-color:blue; margin:5px; } </style> <script> window.onload=function(){ let odiv=document.getElementsByTagName("div")[0]; let obt=document.getElementById("bt"); obt.onclick=function(){ let cloneNode=odiv.cloneNode(); cloneNode.id="mayi"; document.body.appendChild(cloneNode); } } </script> </head> <body> <input type="button" id="bt" value="檢視演示"/> <div id="ant">螞蟻部落</div> </body> </html>
程式碼執行效果截圖如下:
動態修改了新元素的id屬性值。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:200px; height:100px; text-align:center; background-color:blue; margin:5px; } </style> <script> window.onload=function(){ let odiv=document.getElementsByTagName("div")[0]; let obt=document.getElementById("bt"); obt.onclick=function(){ let txtNode=odiv.childNodes[0]; let newTxtNode=txtNode.cloneNode(); odiv.appendChild(newTxtNode); } } </script> </head> <body> <input type="button" id="bt" value="檢視演示"/> <div>螞蟻部落</div> </body> </html>
由於對元素節點的操作佔絕大多數,所以不要想當然認為此方法是針對元素節點的。
上述程式碼實現了對文字節點的拷貝操作,非常簡單,不多介紹。
相關文章
- 原生javascript實現的節點複製cloneNode()函式用法JavaScript函式
- javascript如何實現複製克隆一個dom元素節點JavaScript
- js如何克隆一個節點物件JS物件
- jQuery如何複製克隆一個元素節點jQuery
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- 如何讓 MGR 不從 Primary 節點克隆資料?
- javascript深度克隆JavaScript
- 淺談克隆 JavaScriptJavaScript
- javascript 深度克隆物件JavaScript物件
- JavaScript nodeType節點型別JavaScript型別
- JavaScript刪除節點自身JavaScript
- JavaScript 複習之 Document 節點JavaScript
- JavaScript 複習之 Element 節點JavaScript
- JavaScript動態建立文字節點JavaScript
- Javascript 繼承和克隆JavaScript繼承
- JavaScript深層克隆物件JavaScript物件
- cloneNode與事件拷貝事件
- 【DB寶35】使用MySQL 8.0 克隆(clone)外掛快速新增MGR節點MySql
- k8s克隆節點引起的系統崩潰問題K8S
- JavaScript 監聽子節點改變JavaScript
- javascript createComment()建立註釋節點JavaScript
- javascript如何建立一個文字節點JavaScript
- javascript快速入門15--節點JavaScript
- 在 JavaScript 中如何克隆物件?JavaScript物件
- 簡單介紹克隆 JavaScriptJavaScript
- JavaScript 獲取下一個元素節點JavaScript
- JavaScript監聽後代節點改變JavaScript
- JavaScript 獲取所有後代元素節點JavaScript
- javascript刪除元素節點removeChild()函式JavaScriptREM函式
- javascript節點型別詳細介紹JavaScript型別
- JavaScript獲取父元素下子元素節點JavaScript
- 前端筆記之JavaScript(十)深入JavaScript節點&DOM&事件前端筆記JavaScript事件
- JavaScript 節點物件的型別與名稱JavaScript物件型別
- JavaScript監聽文字節點內容改變JavaScript
- javascript的節點相關內容介紹JavaScript
- javascript如何建立一個屬性節點物件JavaScript物件
- javascript輸出頁面節點層級效果JavaScript
- javascript DOM元素節點操作簡單介紹JavaScript