最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript MutationObserver實例講解

 更新時間:2022年12月13日 10:45:20   作者:不叫貓先生  
MutationObserver用來監(jiān)視DOM變動。DOM的任何變動,比如節(jié)點增減、屬性的變動、文本內(nèi)容的變動都會觸發(fā)MutationObserver事件,它與事件有一個本質(zhì)不同:事件是同步觸發(fā),MutationObserver則是異步觸發(fā),DOM的變動并不會馬上觸發(fā),而是要等到當前所有DOM操作都結(jié)束才觸發(fā)

前言

為什么突然寫MutationObserver呢?最近在寫頁面水印的時候用到了MutationObserver方法,兩者之間有什么聯(lián)系呢?不用MutationObserver情況下,使用網(wǎng)站的人員可以隨意修改DOM就可以把系統(tǒng)作者的版權(quán)標識(水?。┤サ簦缓笫褂脽o水印的網(wǎng)站,這顯然是違背了系統(tǒng)作者的意愿,那么怎么防止這一操作呢?當然是MutationObserver,它能夠監(jiān)聽DOM的變化,根據(jù)DOM的變化然后做出相應(yīng)操作,比如刪除水印后,使用MutationObserver監(jiān)聽到了水印的DOM被刪除,就會立即生成一個水印,這樣就杜絕了上面的情況。

一、MutationObserver

MutationObserver構(gòu)造函數(shù)用來監(jiān)聽DOM的變化,比如節(jié)點增加、刪除,屬性的改變,文本的變動都能監(jiān)聽到。它具有以下特點:

  • 等所有dom操作結(jié)束后才觸發(fā),可以看成異步
  • 會把dom的變化記錄放到數(shù)組中進行處理
  • 可以監(jiān)聽所有類型的dom變化,也能指定類型監(jiān)聽

用MutationObserver創(chuàng)建一個createObserve實例, 它會在指定的 DOM 發(fā)生變化時被調(diào)用。其中MutationObserver構(gòu)造函數(shù)中有兩個參數(shù)。

  • mutationRecoard:存放所有dom變化的數(shù)組
  • observe:觀察者實例
const createObserve = new MutationObserver((mutationRecoard,observe)=>{
})

MutationRecoard監(jiān)聽記錄詳情

dom每次變化都會記錄在MutationRecoard中,所以它是一個數(shù)組類型,MutationRecoard記錄了每次DOM變化時的詳細信息,具體如下所示:

屬性含義
type觀察的變動類型(attribute、characterData或者childList)
target發(fā)生變動的DOM節(jié)點
addedNodes新增的DOM節(jié)點
removedNodes刪除的DOM節(jié)點
previousSibling前一個同級節(jié)點,如果沒有則返回null
nextSibling下一個同級節(jié)點,如果沒有則返回null
attributeName發(fā)生變動的屬性。如果設(shè)置了attributeFilter,則只返回預(yù)先指定的屬性
oldValue變動前的值。這個屬性只對attribute和characterData變動有效,如果發(fā)生childList變動,則返回null

具體如下圖所示:

二、MutationObserver實例對象方法

1. observe(node,config)

配置 MutationObserver 在 DOM 更改匹配給定選項時,通過其回調(diào)函數(shù)開始接收通知。有兩個參數(shù):

  • node:觀察元素的所有節(jié)點
  • config:配置項,可以觀測指定配置項的變化

配置項的詳細屬性如下:

屬性含義
childList子節(jié)點的變動(指新增,刪除或者更改)
attributes屬性的變動
characterData節(jié)點內(nèi)容或節(jié)點文本的變動
subtree布爾值,表示是否將該觀察器應(yīng)用于該節(jié)點的所有后代節(jié)點
attributeOldValue布爾值,表示觀察attributes變動時,是否需要記錄變動前的屬性值
characterDataOldValue布爾值,表示觀察characterData變動時,是否需要記錄變動前的值
attributeFilter數(shù)組,表示需要觀察的特定屬性(比如[‘class’,‘src’])

2. disconnect()

阻止 MutationObserver 實例繼續(xù)接收的通知,直到再次調(diào)用其 observe() 方法,該觀察者對象包含的回調(diào)函數(shù)都不會再被調(diào)用。

3. takeRecords()

從 MutationObserver 的通知隊列中刪除所有待處理的記錄,并將它們返回到 MutationRecord 對象的新 Array 中。

三、案列

  • 創(chuàng)建一個觀察器并傳入回調(diào)
  • 為觀察器配置觀察節(jié)點
  • 指定觀察特定配置的dom變化
  • 執(zhí)行觀察器回調(diào)
  • 獲取到DOM變化記錄
	<div class="content">
		<ui>
			<li class="0">0000000</li>
			<li class="1">1111111</li>
			<li class="2">222222</li>
			<li class="3">33333</li>
			<li class="4">4444</li>
			<li class="5">55555</li>
			<li class="6">6666</li>
			<li class="7">77777</li>
			<li class="8">888888</li>
			<li class="9">99999</li>
		</ui>
	</div>
// 觀察器的配置(需要觀察什么變動)
const config = { attributes: true, childList: true, subtree: true,characterData:true,characterDataOldValue:true,attributDataOldValue:true};
// 當觀察到變動時執(zhí)行的回調(diào)函數(shù)
const callback = function(mutationRecoard, observer) {
    // Use traditional 'for loops' for IE 11
    for(let mutation of mutationRecoard) {
        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)建一個觀察器實例并傳入回調(diào)函數(shù)
const observer = new MutationObserver(callback);
// 以上述配置開始觀察目標節(jié)點
observer.observe(document.getElementsByClassName('content')[0], config);
// 之后,可停止觀察
observer.disconnect();

到此這篇關(guān)于JavaScript MutationObserver實例講解的文章就介紹到這了,更多相關(guān)JS MutationObserver內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序+騰訊地圖開發(fā)實現(xiàn)路徑規(guī)劃繪制

    微信小程序+騰訊地圖開發(fā)實現(xiàn)路徑規(guī)劃繪制

    這篇文章主要介紹了微信小程序+騰訊地圖開發(fā)實現(xiàn)路徑規(guī)劃繪制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • easyui tree帶checkbox實現(xiàn)單選的簡單實例

    easyui tree帶checkbox實現(xiàn)單選的簡單實例

    下面小編就為大家?guī)硪黄猠asyui tree帶checkbox實現(xiàn)單選的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • BootStrap整體框架之基礎(chǔ)布局組件

    BootStrap整體框架之基礎(chǔ)布局組件

    這篇文章主要為大家詳細介紹了BootStrap整體框架之基礎(chǔ)布局組件的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript中call,apply,bind的區(qū)別與實現(xiàn)

    JavaScript中call,apply,bind的區(qū)別與實現(xiàn)

    這篇文章主要介紹了JavaScript中call,apply,bind的區(qū)別與實現(xiàn),文章通過圍繞主題思想展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • JavaScript函數(shù)apply()和call()用法與異同分析

    JavaScript函數(shù)apply()和call()用法與異同分析

    這篇文章主要介紹了JavaScript函數(shù)apply()和call()用法與異同,結(jié)合實例形式分析了apply()和call()的功能、區(qū)別、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-08-08
  • electron-builder允許安裝時請求提升權(quán)限的場景分析

    electron-builder允許安裝時請求提升權(quán)限的場景分析

    electron-builder 作為一個用于 Electron 應(yīng)用程序打包的工具,需要下載并使用 Electron 運行時來創(chuàng)建可執(zhí)行文件,這篇文章給大家介紹electron-builder允許安裝時請求提升權(quán)限的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • JS使用Date對象實時顯示當前系統(tǒng)時間簡單示例

    JS使用Date對象實時顯示當前系統(tǒng)時間簡單示例

    這篇文章主要介紹了JS使用Date對象實時顯示當前系統(tǒng)時間,涉及javascript基于定時器動態(tài)操作Date對象相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • EL表達式截取字符串的函數(shù)說明

    EL表達式截取字符串的函數(shù)說明

    這篇文章主要介紹了EL表達式截取字符串的函數(shù)說明,在文章下面給大家介紹了JSTL中自帶的方法列表以及其描述,需要的朋友參考下吧
    2017-09-09
  • TypeScript類型系統(tǒng)自定義數(shù)據(jù)類型教程示例

    TypeScript類型系統(tǒng)自定義數(shù)據(jù)類型教程示例

    這篇文章主要為大家介紹了TypeScript類型系統(tǒng)自定義數(shù)據(jù)類型教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JavaScript中常用的驗證reg

    JavaScript中常用的驗證reg

    js驗證實用性非常高,用途非常廣泛,用于校驗ip地址的格式等操作,本文給大家介紹JavaScript中常用的驗證reg,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-10-10

最新評論

多伦县| 洪江市| 措美县| 盐边县| 雷山县| 婺源县| 卓尼县| 新乡县| 泊头市| 色达县| 彭水| 贡山| 怀宁县| 兴业县| 玉门市| 阿拉尔市| 扬中市| 沂水县| 稻城县| 福鼎市| 大邑县| 沭阳县| 杂多县| 奎屯市| 白银市| 育儿| 中阳县| 库伦旗| 阿巴嘎旗| 鸡泽县| 乡宁县| 合作市| 高青县| 望都县| 子洲县| 揭阳市| 江山市| 沽源县| 舞钢市| 怀来县| 横峰县|