使用window.MutationObserver 監(jiān)聽 元素屬性class 變化

window.MutationObserver(callback)

該接口用來觀察節(jié)點(diǎn)變化,MutationObserver是一個(gè)構(gòu)造器,接收一個(gè)回調(diào)函數(shù)callback用來處理節(jié)點(diǎn)變化時(shí)所做的操作。
var observe = new MutationObserver(mutationCallback);
MutationObserver對(duì)象有三個(gè)方法,分別如下:

observe:設(shè)置觀察目標(biāo),接受兩個(gè)參數(shù):target:觀察目標(biāo),config:設(shè)置觀察選項(xiàng)

var observe = new MutationObserver(mutationCallback);
observe.observe(dom, config);// 后面介紹config的配置

disconnect:阻止對(duì)目標(biāo)節(jié)點(diǎn)的監(jiān)聽。

var observe = new MutationObserver(mutationCallback);
observe.disconnect();

takeRecords:取出記錄隊(duì)列中的記錄。它的一個(gè)作用是當(dāng)你不想對(duì)節(jié)點(diǎn)變化立刻做出反應(yīng),過段時(shí)間再顯示改變了節(jié)點(diǎn)的內(nèi)容。

var observe = new MutationObserver(mutationCallback);
var record = observe.takeRecords();

config配置(只介紹常用的幾個(gè)):

let config = {
    attributes: true, //目標(biāo)節(jié)點(diǎn)的屬性變化
    childList: true, //目標(biāo)節(jié)點(diǎn)的子節(jié)點(diǎn)的新增和刪除
    characterData: true, //如果目標(biāo)節(jié)點(diǎn)為characterData節(jié)點(diǎn)(一種抽象接口,具體可以為文本節(jié)點(diǎn),注釋節(jié)點(diǎn),以及處理指令節(jié)點(diǎn))時(shí),也要觀察該節(jié)點(diǎn)的文本內(nèi)容是否發(fā)生變化
    subtree: true, //目標(biāo)節(jié)點(diǎn)所有后代節(jié)點(diǎn)的attributes、childList、characterData變化
};

示例

if (window.MutationObserver) {
      var observer = new MutationObserver(function(mrs) {
        if (mrs[0].attributeName == 'class') {
          let classStr = $('html')[0].getAttribute('class');
          let classArr = classStr ? classStr.split(' ') : [];
          classArr = classArr.filter(item => item);
          
        }
      });
      observer.observe($('html')[0], {
        attributes: true,
      });
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容