JavaScript cloneNode() 克隆節點
此方法可以克隆一個節點,根據引數的不同可以進行淺拷貝或者深拷貝。
下面會結合程式碼例項對此方法的使用進行詳細介紹。
語法結構:
[JavaScript] 純文字檢視 複製程式碼Node.cloneNode(deep)
引數解析:
(1).Node:將要被克隆的節點。
(2).deep: 可選,布林值,預設值為false,規定是否進行深度克隆,如果引數為true,那麼將克隆Node節點以及它的後代節點,如果引數為false,那麼只克隆Node節點本身。
瀏覽器支援:
(1).IE瀏覽器支援此方法。
(2).edge瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).opera瀏覽器支援此方法。
(5).火狐瀏覽器支援此方法。
(6).safria瀏覽器支援此方法。
程式碼例項:
[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深度克隆JavaScript
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- 如何讓 MGR 不從 Primary 節點克隆資料?
- 淺談克隆 JavaScriptJavaScript
- JavaScript nodeType節點型別JavaScript型別
- Javascript 繼承和克隆JavaScript繼承
- JavaScript 複習之 Element 節點JavaScript
- JavaScript 複習之 Document 節點JavaScript
- 簡單介紹克隆 JavaScriptJavaScript
- 在 JavaScript 中如何克隆物件?JavaScript物件
- cloneNode與事件拷貝事件
- JavaScript 監聽子節點改變JavaScript
- k8s克隆節點引起的系統崩潰問題K8S
- 【DB寶35】使用MySQL 8.0 克隆(clone)外掛快速新增MGR節點MySql
- JavaScript 獲取所有後代元素節點JavaScript
- JavaScript監聽後代節點改變JavaScript
- JavaScript獲取父元素下子元素節點JavaScript
- JavaScript 獲取下一個元素節點JavaScript
- 前端筆記之JavaScript(十)深入JavaScript節點&DOM&事件前端筆記JavaScript事件
- Javascript 中的克隆(拷貝)問題JavaScript
- JavaScript監聽文字節點內容改變JavaScript
- JavaScript刪除元素節點程式碼例項JavaScript
- JavaScript 節點物件的型別與名稱JavaScript物件型別
- js,javascript 根據 xpath 路勁定位節點JSJavaScript
- MySQL的clone(克隆)要注意的點MySql
- 前端戰五渣學JavaScript——深克隆(深拷貝)前端JavaScript
- 區塊鏈全節點的JavaScript實現:Bcoin 入門 - pradyuman區塊鏈JavaScript
- Vue、Javascript小細節VueJavaScript
- consul 多節點/單節點叢集搭建
- 使用結構化克隆在 JavaScript 中進行深度複製JavaScript
- Kubernetes – 節點
- js中深克隆與淺克隆JS
- 淺克隆和深克隆的用法
- JQuery2:節點選取與節點插入jQuery
- DataNode工作機制 & 新增節點 &下線節點
- mysql根據節點查詢所有葉節點MySql
- rac新增節點前之清除節點資訊
- dom4j 根據xml節點路徑查詢節點,找到對應的目標節點下的子節點,對節點Text值進行修改XML