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
- 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
- Android檔案或資料夾內容改變監聽器(FileObserver)AndroidServer
- vue 父元件在created中傳值給子元件,子元件去監聽props變化Vue元件
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- 關於EditText焦點監聽
- 動態監聽與靜態監聽的一些特點。
- 【ztree】zTree節點增刪改
- JavaScript cloneNode() 克隆節點JavaScript
- jQuery如何獲取元素父節點和子節點jQuery
- oracle rac 其中第一個節點監聽偶爾中斷處理案例Oracle
- JavaScript中this指向以及改變this指向JavaScript
- 實時監聽div,input內容改變並獲取值(包括指令碼動態新增)指令碼
- vue之實現日曆----顯示農曆,滾動日曆監聽年月改變Vue
- Javascript事件模型系列(三)jQuery中的事件監聽方式及異同點JavaScript事件模型jQuery
- node.js監聽檔案變化Node.js
- 【轉載】AngularJS監聽路由變化AngularJS路由
- json 陣列已知父節點,求所有子節點JSON陣列
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件
- 【ztree系列】節點的增刪改