MutationObserver

MutationObserver 是一個可以監(jiān)聽DOM結(jié)構(gòu)變化的接口。

官方使用方式示例

//選擇一個需要觀察的節(jié)點(diǎn)
var targetNode = document.getElementById('some-id');

// 設(shè)置observer的配置選項(xiàng)
var config = { attributes: true, childList: true, subtree: true };

// 當(dāng)節(jié)點(diǎn)發(fā)生變化時的需要執(zhí)行的函數(shù)
var callback = function(mutationsList, observer) {
    for(var mutation of mutationsList) {
        if (mutation.type == 'childList') {
            console.log('A child node has been added or removed.');
        }
        else if (mutation.type == 'attributes') {
            console.log('The ' + mutation.attributeName + ' attribute was modified.');
        }
    }
};

// 創(chuàng)建一個observer示例與回調(diào)函數(shù)相關(guān)聯(lián)
var observer = new MutationObserver(callback);

//使用配置文件對目標(biāo)節(jié)點(diǎn)進(jìn)行觀測
observer.observe(targetNode, config);

// 停止觀測
observer.disconnect();

示例引用鏈接 https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

使用方式詳解

<!DOCTYPE html>

<div id="opop">
    <div class="op"></div>
    <div class="op"></div>
    <div class="op op-node-change"></div>
</div>
<!--引用jqery-->
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
<script>

    var targetNode =document.getElementById('opop');

    var observer = new MutationObserver(function(mutations) {
        var $node = $('#opop .op:not(.op-node-change)');
        $node.addClass('op-node-change test');
        console.log(111111);
    });

    observer.observe(targetNode, { attributes: true, childList: true, subtree: true });

</script>

上述代碼是一個簡單的應(yīng)用示例侮叮, 是在id="opop"下讨阻,給所有的沒有"op-node-change"的div 增加類"op-node-change test"
這段代碼直接運(yùn)行后的顯示


可以看到div 的類名并沒有發(fā)生改變治宣。此時,在Console中動態(tài)的增加新的節(jié)點(diǎn)



然后可以看到div 的類名發(fā)生了我們所期待的變化。

這是因?yàn)镸utationObserver是監(jiān)聽DOM樹變化的接口勋功,一開始的時候后div先加載蹬音,然后是js加載上煤,此時DOM樹沒有發(fā)生變化,所有MutationObserver的回調(diào)函數(shù)沒有執(zhí)行著淆,當(dāng)我們動態(tài)的改變DOM樹的結(jié)構(gòu)時劫狠,MutationObserver監(jiān)聽到了變化拴疤,所以回調(diào)函數(shù)起了作用。這就是我們最后看到的結(jié)果独泞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呐矾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子懦砂,更是在濱河造成了極大的恐慌蜒犯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞膘,死亡現(xiàn)場離奇詭異罚随,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)羽资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門淘菩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人削罩,你說我怎么就攤上這事瞄勾。” “怎么了弥激?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵进陡,是天一觀的道長。 經(jīng)常有香客問我微服,道長趾疚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任以蕴,我火速辦了婚禮糙麦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丛肮。我一直安慰自己赡磅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布宝与。 她就那樣靜靜地躺著焚廊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习劫。 梳的紋絲不亂的頭發(fā)上咆瘟,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音诽里,去河邊找鬼袒餐。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灸眼。 我是一名探鬼主播卧檐,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幢炸!你這毒婦竟也來了泄隔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宛徊,失蹤者是張志新(化名)和其女友劉穎佛嬉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闸天,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暖呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苞氮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾揽。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖笼吟,靈堂內(nèi)的尸體忽然破棺而出库物,到底是詐尸還是另有隱情,我是刑警寧澤贷帮,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布戚揭,位于F島的核電站,受9級特大地震影響撵枢,放射性物質(zhì)發(fā)生泄漏民晒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一锄禽、第九天 我趴在偏房一處隱蔽的房頂上張望潜必。 院中可真熱鬧,春花似錦沃但、人聲如沸磁滚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恨旱。三九已至,卻和暖如春坝疼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谆沃。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工钝凶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓耕陷,卻偏偏與公主長得像掂名,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哟沫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容