今天来介绍一个颇有用的DOM API—— MutationObserver
页面或者某个父类DOM须要监听子节点的变化,来进行统一回调,这个变化包括了:node
这里采用了MDN的官方介绍,MutationObserver接口提供了监视对DOM树所作更改的能力。它被设计为旧的Mutation Events功能的替代品,该功能是DOM3 Events规范的一部分。
MutationObserver主要包括了三个方法,具体可结合下面示例:git
经过MutationObserver()便可构造一个实例,下面为使用示例github
// 选择须要观察变更的节点 const targetNode = document.getElementById('some-id'); // 观察器的配置(须要观察什么变更) const config = { attributes: true, // 开启监听属性 childList: true, // 开启监听子节点 subtree: true // 开启监听子节点下面的全部节点 }; // 当观察到变更时执行的回调函数 const callback = function(mutationsList, observer) { // Use traditional 'for loops' for IE 11 for(let 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.'); } } }; // 建立一个观察器实例并传入回调函数 const observer = new MutationObserver(callback); // 以上述配置开始观察目标节点 observer.observe(targetNode, config); // 以后,可中止观察 observer.disconnect();
上文的config为一个MutationObserverInit字典,描述了MutationObserver的配置,咱们有如下可选属性进行配置(没有必选属性)数组
属性 | 介绍 |
---|---|
attributeFilter | 要监视的特定属性名称的数组。若是未包含此属性,则对全部属性的更改都会触发变更通知。无默认值。 |
attributeOldValue | 当监视节点的属性改动时,将此属性设为 true 将记录任何有改动的属性的上一个值。无默认值。 |
attributes | 设为 true 以观察受监视元素的属性值变动。默认值为 false。 |
characterData | 设为 true 以监视指定目标节点或子节点树中节点所包含的字符数据的变化。无默认值。 |
characterDataOldValue | 设为 true 以在文本在受监视节点上发生更改时记录节点文本的先前值。无默认值。 |
childList | 设为 true 以监视目标节点(若是 subtree 为 true,则包含子孙节点)添加或删除新的子节点。默认值为 false。 |
subtree | 设为 true 以将监视范围扩展至目标节点整个节点树中的全部节点。MutationObserverInit 的其余值也会做用于此子树下的全部节点,而不单单只做用于目标节点。默认值为 false。 |
callback
一个回调函数,每当被指定的节点或子树以及配置项有Dom变更时会被调用。回调函数拥有两个参数:一个是描述全部被触发改动的 MutationRecord 对象数组,另外一个是调用该函数的MutationObserver 对象。markdown
https://developer.mozilla.org...函数