- 它等待所有脚本任务完成后,才会运行(即异步触发方式)。
- 它把 DOM 变动记录封装成一个数组进行处理,而不是一条条个别处理 DOM 变动。
- 它既可以观察 DOM 的所有类型变动,也可以指定只观察某一类变动。
MutationObserver 构造函数
var observer = new MutationObserver(function (mutationRecoards, observer) { // mutationRecoards变动数组 // observer 观察者实例 });
构造函数接收一个回调函数,回调函数有两个参数,一个变动数组,第二个是观察者实例。
MutationObserver 的实例方法
1. observe(node, config)
- childList:子节点的变动(指新增,删除或者更改)。
- attributes:属性的变动。
- characterData:节点内容或节点文本的变动。
- subtree:布尔值,表示是否将该观察器应用于该节点的所有后代节点。
- attributeOldValue:布尔值,表示观察attributes变动时,是否需要记录变动前的属性值。
- characterDataOldValue:布尔值,表示观察characterData变动时,是否需要记录变动前的值。
- attributeFilter:数组,表示需要观察的特定属性(比如[‘class’,‘src’])。
// 开始监听文档根节点(即 标签)的变动 mutationObserver.observe(document.documentElement, { attributes: true, characterData: true, childList: true, subtree: true, attributeOldValue: true, characterDataOldValue: true });
对一个节点添加观察器,就像使用addEventListener方法一样,多次添加同一个观察器是无效的,回调函数依然只会触发一次。但是,如果指定不同的options对象,就会被当作两个不同的观察器。
2. disconnect()
disconnect方法用来停止观察。调用该方法后,DOM 再发生变动,也不会触发观察器。
3. takeRecords()
用来清除变动记录,即不再处理未处理的变动。该方法返回变动记录的数组。
MutationRecord 对象
- type:观察的变动类型(attribute、characterData或者childList)。
- target:发生变动的DOM节点。
- addedNodes:新增的DOM节点。
- removedNodes:删除的DOM节点。
- previousSibling:前一个同级节点,如果没有则返回null。
- nextSibling:下一个同级节点,如果没有则返回null。
- attributeName:发生变动的属性。如果设置了attributeFilter,则只返回预先指定的属性。
- oldValue:变动前的值。这个属性只对attribute和characterData变动有效,如果发生childList变动,则返回null。
例子

参考
Mutation Observer API
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224571.html原文链接:https://javaforall.net
