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
- 11.2資料庫監聽的改變資料庫
- JavaScript實時監聽input中值變化JavaScript
- 監聽DOM載入完成及改變——MutationObserver應用Server
- JavaScript 事件監聽JavaScript事件
- Zookeeper(2)---節點屬性、監聽和許可權
- 【轉】JavaScript對Json節點的增刪改JavaScriptJSON
- vue-router watch 監聽路由引數改變觸發函式Vue路由函式
- javascript監聽鍵盤事件JavaScript事件
- vue 監聽路由變化Vue路由
- 處理rac資料庫一個節點監聽異常資料庫
- 【RAC】刪除RAC資料庫節點(三)——刪除監聽資料庫
- localeStorage 當前標籤頁變化監聽不到,只能監聽不同標籤頁變化,自己寫方法監聽
- 現版本小程式暫時無法監聽webview頁面高度改變WebView
- 如何監聽陣列變化?陣列
- 安卓監聽網路變化安卓
- MutationObserver監聽DOM變化示例Server
- JavaScript所有後代元素JavaScript
- Android檔案或資料夾內容改變監聽器(FileObserver)AndroidServer
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- 關於EditText焦點監聽
- 動態監聽與靜態監聽的一些特點。
- 【ztree】zTree節點增刪改
- JavaScript cloneNode() 克隆節點JavaScript
- oracle rac 其中第一個節點監聽偶爾中斷處理案例Oracle
- home鍵監聽(Android應用切換到後臺監聽)Android
- JavaScript中this指向以及改變this指向JavaScript
- 實時監聽div,input內容改變並獲取值(包括指令碼動態新增)指令碼
- vue之實現日曆----顯示農曆,滾動日曆監聽年月改變Vue
- Javascript事件模型系列(三)jQuery中的事件監聽方式及異同點JavaScript事件模型jQuery
- node.js監聽檔案變化Node.js
- 【轉載】AngularJS監聽路由變化AngularJS路由
- 【轉】Oracle 學習筆記: Oracle10g監聽埠改變後DB Control無法使用的解決方法Oracle筆記
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件