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