JavaScript 監聽子節點改變
關於Mutation Observer基本知識可以參閱以下兩篇文章:
(1).Mutation Observer優點一章節。
(2).Mutation Observer用法一章節。
下面通過程式碼例項介紹一下如何監聽childList的變動,也就是監聽子節點的變動。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload = function () { var ul = document.querySelector("ul"); var Observer = new MutationObserver(function (mutations, instance) { console.log(mutations); console.log(instance); mutations.forEach(function (mutation) { console.log(mutation); }); }); Observer.observe(ul, { childList: true, subtree: true }); ul.appendChild(document.createElement("div")); ul.appendChild(document.createTextNode("螞蟻部落二")); ul.removeChild(ul.childNodes[0]); ul.childNodes[0].appendChild(document.createElement("div")); } </script> </head> <body> <div id="box"> <ul> <li>螞蟻部落一</li> </ul> </div> </body> </html>
下面對程式碼進行一下分析,首先看執行控制檯截圖:
當其他所有指令碼程式碼都執行完畢之後,MutationObserver建構函式的回撥函式才會被執行。
建構函式的第一個陣列引數用來存放所有的變化,每一個成員都是MutationRecord型別。
[JavaScript] 純文字檢視 複製程式碼Observer.observe(ul, { childList: true,//監聽子節點 subtree: true //監聽所有後代節點 });
規定監聽器將監聽ul元素子節點和所有後代節點的變化。
需要注意的是,如果要監聽subtree,必須同時指定childList、attributes和characterData一種或多種。
[JavaScript] 純文字檢視 複製程式碼ul.appendChild(document.createElement("div"))
為ul元素新增一個div節點,此動作將被記錄在mutations陣列中。
[JavaScript] 純文字檢視 複製程式碼ul.appendChild(document.createTextNode("螞蟻部落二"))
為ul元素新增一個文字節點,此動作將被記錄在mutations陣列中。
[JavaScript] 純文字檢視 複製程式碼ul.removeChild(ul.childNodes[0]);
為ul元素刪除第一個子節點(此子節點是一個文字節點,文字或者空白換行都被當做一個文字節點)。
上述動作也會被記錄在mutations陣列中。
[JavaScript] 純文字檢視 複製程式碼ul.childNodes[0].appendChild(document.createElement("div"))
為ul元素第一個子節點新增一個div元素;由於設定了可以監聽subtree,並且與subtree一同設定還有childList,那麼ul元素的子節點變化和它所有後代節點的子節點變化都會被監聽;自然也會被記錄在mutations陣列中。
MutationRecord物件,直接看控制檯截圖:
非常簡單,就不多介紹了。
相關文章
- JavaScript監聽後代節點改變JavaScript
- JavaScript監聽文字節點內容改變JavaScript
- JavaScript監聽屬性改變JavaScript
- 監聽Dom節點變化 - Mutation ObserverServer
- JavaScript實時監聽input中值變化JavaScript
- JavaScript 事件監聽JavaScript事件
- 監聽DOM載入完成及改變——MutationObserver應用Server
- Zookeeper(2)---節點屬性、監聽和許可權
- vue-router watch 監聽路由引數改變觸發函式Vue路由函式
- vue 監聽路由變化Vue路由
- 現版本小程式暫時無法監聽webview頁面高度改變WebView
- localeStorage 當前標籤頁變化監聽不到,只能監聽不同標籤頁變化,自己寫方法監聽
- vue 父元件在created中傳值給子元件,子元件去監聽props變化Vue元件
- 如何監聽URL的變化?
- MutationObserver監聽DOM變化示例Server
- 如何監聽陣列變化?陣列
- 安卓監聽網路變化安卓
- 站點背景改變
- 關於EditText焦點監聽
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- kubernetes 加入子節點
- JavaScript中this指向以及改變this指向JavaScript
- JavaScript cloneNode() 克隆節點JavaScript
- 實時監聽div,input內容改變並獲取值(包括指令碼動態新增)指令碼
- vue之實現日曆----顯示農曆,滾動日曆監聽年月改變Vue
- 【ztree】zTree節點增刪改
- node.js監聽檔案變化Node.js
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件
- 使用JavaScript給物件修改註冊監聽器JavaScript物件
- json 陣列已知父節點,求所有子節點JSON陣列
- 監聽 watch props物件屬性監聽 或深度監聽物件
- vue3如何將 app 全域性變數物件變為響應式並監聽到某個屬性的改變VueAPP變數物件
- zookeeper原始碼(10)node增刪改查及監聽原始碼
- JavaScript nodeType節點型別JavaScript型別
- 監聽配置細節引數詳解兩則
- Git改變歷史-章節筆記Git筆記
- React和Vue中,是如何監聽變數變化的ReactVue變數
- iOS UIButton之改變有效點選區域(改變熱區)iOSUI