MutationObserver 简介

123 阅读2分钟

①MutationObserver是一个可以监听 DOM 结构变化的接口。当 DOM 对象树发生任何变动时,MutationObserver都会得到通知;
②MutationObserver是一个构造器,接受一个 callback 参数,用来处理节点变化的回调函数,返回两个参数:mutations:节点变化记录列表,observer:构造 MutationObserver 对象;
③MutationObserver对象有三个方法:1、observe:设置观察目标,接受两个参数,target:观察目标,options:通过对象成员来设置观察选项;2、disconnect:阻止观察者观察任何变化;3、takeRecords:清空记录队列并返回里面的内容;
④observe 方法中 options 参数有以下几个选项:1、childList:设置 true,表示观察目标子节点的变化,比如添加或者删除目标子节点,不包括修改子节点以及子节点后代的变化;2、attributes:设置 true,表示观察目标属性的改变;3、characterData:设置 true,表示观察目标数据的改变;4、subtree:设置为 true,目标及目标的后代改变都会观察;5、attributeOldValue:如果属性为 true 或者省略,则相当于设置为 true,表示需要记录改变签的目标属性值,设置了 attributeOldValue 可以省略 attributes 设置;6、characterDataOldValue:如果 characterData 为 true 或省略,则相当于设置为 true,表示需要记录改变之前的目标数据,设置了 characterDataOldValue 可以省略 characterData 设置;7、attributeFilter:如果不是所有的属性改变都需要被观察,并且 attributes 设置为 true 或者被忽略,那么设置一个需要观察的属性本地名称(不需要命名空间)的列表;
⑤MutationObserver有以下特点:1、采用异步方式,等待所有脚本任务完成后才会运行;2、把 DOM 变动记录封装成一个数组进行处理,而不是一条条的个别处理 DOM 变动;3、既可以观察发生在 DOM 节点的所有变动,也可以观察某一类变动;4、当 DOM 发生变动时会触发MutationObserver事件,但它与事件有一个本质的不同:事件是同步触发,也就是说 DOM 发生变动立刻会触发相应的事件;MutationObserver则是异步触发,DOM 发生变动以后,并不会马上触发,而是要等到当前所有 DOM 操作都结束后才触发;