JavaScript監聽屬性改變
關於Mutation Observer基本知識可以參閱以下兩篇文章:
(1).Mutation Observer優點一章節。
(2).Mutation Observer用法一章節。
下面通過程式碼例項介紹一下如何監聽attributes的變動,也就是監聽子節點的變動。
程式碼例項如下:
[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, { attributes: true }); ul.setAttribute("class", "a"); ul.setAttribute("class", "b"); ul.removeAttribute("class"); } </script> </head> <body> <div id="box"> <ul> <li>螞蟻部落</li> </ul> </div> </body> </html>
下面對程式碼進行一下分析,首先看執行控制檯截圖:
當其他所有指令碼程式碼都執行完畢之後,MutationObserver建構函式的回撥函式才會被執行。
建構函式的第一個陣列引數用來存放所有的變化,每一個成員都是MutationRecord型別。
[JavaScript] 純文字檢視 複製程式碼Observer.observe(ul, { attributes: true //監聽屬性節點的變化 });
規定監聽器將監聽ul元素屬性節點的變化。
[JavaScript] 純文字檢視 複製程式碼ul.setAttribute("class", "a")
為ul元素新增一個class屬性,並設定屬性值為a;動作將被記錄在mutations陣列中。
[JavaScript] 純文字檢視 複製程式碼ul.setAttribute("class", "b")
修改ul元素原來class屬性值為b;動作將被記錄在mutations陣列中。
[JavaScript] 純文字檢視 複製程式碼ul.removeAttribute("class");
刪除ul元素上的class屬性;動作將被記錄在mutations陣列中。
MutationRecord物件,直接看控制檯截圖:
監聽指定屬性的改變:
如果不指定監聽哪些屬性,那麼所有屬性的改變都在監聽範圍之內。
Mutation Observer提供了監聽指定屬性的功能,程式碼例項如下:
[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, { attributes: true, attributeFilter: ["class"] }); ul.setAttribute("class", "a"); ul.setAttribute("ant", "b"); } </script> </head> <body> <div id="box"> <ul> <li>螞蟻部落</li> </ul> </div> </body> </html>
上面程式碼只會監聽class屬性的變化。
attributeFilter屬性值是一個陣列,可以規定要監聽的屬性名稱。
相關文章
- JavaScript 監聽子節點改變JavaScript
- JavaScript監聽後代節點改變JavaScript
- JavaScript監聽文字節點內容改變JavaScript
- 屬性和監聽
- 監聽 watch props物件屬性監聽 或深度監聽物件
- 論如何監聽物件某個屬性的變化物件
- vue3如何將 app 全域性變數物件變為響應式並監聽到某個屬性的改變VueAPP變數物件
- javascript擼來擼去(1)-事件監聽與物件屬性JavaScript事件物件
- 微信小程式,實現 watch 屬性,監聽資料變化微信小程式
- jquery改變元素屬性值jQuery
- 改變檔案屬性 (轉)
- javascript動態改變iframe元素src屬性程式碼例項JavaScript
- 11.2資料庫監聽的改變資料庫
- vue監聽input是否為空(監聽值為物件某個屬性)Vue物件
- JavaScript實時監聽input中值變化JavaScript
- CSScursor屬性改變滑鼠的樣式CSS
- Vue:watch 監聽多個屬性值的方法Vue
- vue計算屬性 監聽 方法的區別Vue
- 學習筆記:vue為什麼不能監聽陣列屬性的變化筆記Vue陣列
- js 改變 控制元件的屬性值JS控制元件
- 監聽DOM載入完成及改變——MutationObserver應用Server
- JavaScript 事件監聽JavaScript事件
- Zookeeper(2)---節點屬性、監聽和許可權
- iOS筆記--UIButton常用屬性和監聽方法iOS筆記UI
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件
- XE 畫矩形實現拖拉改變大小(屬性)
- angular2+監測屬性的變化Angular
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務...Vue變數
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務Vue變數
- 深入理解 Getter和Setter 對物件的屬性監聽物件
- vue原始碼學習:Object.defineProperty 物件屬性監聽Vue原始碼Object物件
- linux 檔案屬性介紹及改變方法Linux
- python 類繼承,對類屬性的改變Python繼承
- vue-router watch 監聽路由引數改變觸發函式Vue路由函式
- 【Vue】計算屬性 監聽屬性 元件通訊 動態元件 插槽 vue-cli腳手架Vue元件
- javascript監聽鍵盤事件JavaScript事件
- C# 設計一個類,監視這個類的屬性有沒發生改變C#
- linux 如何改變檔案屬性與許可權Linux