MutationObserver 方法

MutationObserver 方法MutationObserver是什么MutationObserverAPI让我们能监听DOM树变化,该API设计用来替换掉在DOM3事件规范中引入的Mutationevents。Mutationevents是同步触发的,每次变动都会触发一次调用。MutationObserverAPI是异步触发的,DOM的变动并不会马上触发,而是要等到当前所有DOM操作都结束才触发。所以MutationObserver相比Mutationevents性能要更高。代码

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

MutationObserver 是什么

MutationObserver API 让我们能监听 DOM 树变化,该 API 设计用来替换掉在 DOM 3 事件规范中引入的 Mutation events。

Mutation events 是同步触发的,每次变动都会触发一次调用。
MutationObserver API 是异步触发的, DOM 的变动并不会马上触发,而是要等到当前所有 DOM 操作都结束才触发。所以 MutationObserver 相比 Mutation events 性能要更高。

代码示例

// 某个需要被监控的 dom 元素。
var targetNode = document.getElementById('elem-id');

//配置 dom 的哪些改变会触发回调函数,详细见下文表格。
var mutationObserverInitConfig = { 
    attributes: true, childList: true, subtree: true };

// dom 变化时触发的回调函数,传入 mutationsList:记录 dom 变化的对象数组。
var callback = function(mutationsList) { 
   
   for(var mutation of mutationsList) { 
   
           console.log( 'dom 变化啦!');
           youCoreFun();
   }
};

// 创建一个 MutationObserver 示例,传入回调函数
var observer = new MutationObserver(callback);

// 注册监控的节点、监控的事件
observer.observe(targetNode, mutationObserverInitConfig);

// 停止监控
observer.disconnect();

Jetbrains全家桶1年46,售后保障稳定

MutationObserver 允许我们订阅某个dom元素的某些事件变化:

初始化

var callback = function(mutationsList) { 
   
// mutationsList:数组类型的通知队列,其元素 MutationRecord 记录触发变化的详细信息。
// mutationsList:[MutationRecord,MutationRecord]
};
var observer = new MutationObserver(callback);

MutationRecord

每次 dom 变动都会触发通知,合理利用 MutationRecord 进行条件判断,避免执行不必要的 callback 操作。

属性 描述
type 根据变动类型的不同,值可能性:attributes,characterData、childList
target 触发通知的DOM节点
addedNodes 被添加的节点
removedNodes 被删除的节点
previousSibling 被添加或被删除的节点的前一个兄弟节点
nextSibling 被添加或被删除的节点的后一个兄弟节点
attributeName 发生变更的属性的名称
attributeNamespace 发生变更的属性的命名空间
oldValue 果 type 为 characterData,则返回该节点变化之前的文本数据;如果 type为 childList,则返回 null

方法详解

observe(dom,configObj)

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

调用 observe 后开始接收通知,触发初始化 MutationObserver 实例时传入的回调函数。

mutationObserverInit 字典

MutationObserver 配置信息,observe 函数的第二个入参,对象类型。

属性 类型 描述 默认值
childList Boolean 观察子节点变动 false
subtree Boolean 观察所有后代节点的变动 false
attributes Boolean 观察属性的变动 false
attributeFilter Array 属性过滤器,例如:传入[“status”],仅在属性 status 变化时触发回调
attributeOldValue Boolean 是否记录 attributes 变动前的属性值
characterData Boolean 观察字符数据的变化
characterDataOldValue Boolean 是否记录 characterData 变动前的属性值

注意

  • childList 和 subtree 指定了监视范围(子节点或者所有后代节点),attributes 和 characterData 配置是否在监视范围内监控目标节点属性、文本的变化。

  • childList,attributes 或者 characterData 三个属性之中,至少有一个必须为 true,否则会抛出 TypeError 异常。

disconnect()

observer.disconnect();

告诉观察者停止观察变动。 可以通过调用其observe()方法来重用观察者。所有已经检测到但是尚未向观察者报告的变动都会被丢弃。

takeRecords()

observer.takeRecords();

除了被动等待变化事件通知,我们还可以使用 takeRecords 函数主动从 通知队列中拉取所有待处理的通知。

需要注意的是调用 takeRecords 函数后,通知队列为空,不会触发回调函数。

takeRecords例子

浏览器兼容性

MutationObserver 方法
不兼容的浏览器可以使用旧 API Mutation events 作为替代方案。

参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络爬虫原理解析「建议收藏」

    1、网络爬虫原理网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D到E到C到F(ABDECF)而宽度优先的遍历方式ABCDEF。2、写网络爬虫的原因(1)互联网中的数据量大,我们不能人工的去收集数据,这样会很浪费时间与金钱…

    2022年4月10日
    64
  • 微软日语输入法使用方法「建议收藏」

    微软日语输入法使用方法「建议收藏」微软日语输入法使用方法:输入时,当打上一个假名的罗马字时,它将自动变成对应的假名,如果是输入假名或标点,按回车即可。如果是输入日语中的汉字,那么就在输入汉字的假名以后按空格键。就像用汉字的拼音输入法一样,可能会有重码,再按空格键,它将切换到下一个,如果再按空格键,它将弹出选择框,选择好后,按回车确定。输入法有自动记忆功能,即最近选用过的词会自动列在最前面。 假名-罗马字对照表: あア

    2022年8月30日
    8
  • wireshark找不到接口win10_安装打印机找不到usb接口

    wireshark找不到接口win10_安装打印机找不到usb接口Win10下使用WireShark出现没有找到接口问题,无法抓取数据包解决:安装Win10Pcap。到http://www.win10pcap.org/download/下载该软件安装完成后,重启WireShark

    2025年8月5日
    6
  • win10自带虚拟机安装mac系统_苹果系统虚拟机安装win7

    win10自带虚拟机安装mac系统_苹果系统虚拟机安装win7下来给大家介绍虚拟机的形式安装XP,我用的测试软件为vmwarefusion3.0,这个是最著名的虚拟机软件公司vmware针对MAC系统开发的虚拟机软件,可以在苹果里面虚拟出很多个系统,包括windows,linux等。装好软件以后打开文件-新建虚拟机:一般选择“更加无缝”因为我们需要两个系统之间互相访问数据。启动就可以安装了,都是无人…

    2022年8月16日
    9
  • LinearGradient线性渲染

    LinearGradient线性渲染

    2021年12月17日
    41
  • 【运筹学】整数规划、分支定界法总结 ( 整数规划 | 分支定界法 | 整数规划问题 | 松弛问题 | 分支定界法 | 分支定界法概念 | 分支定界法步骤 ) ★★

    【运筹学】整数规划、分支定界法总结 ( 整数规划 | 分支定界法 | 整数规划问题 | 松弛问题 | 分支定界法 | 分支定界法概念 | 分支定界法步骤 ) ★★一、整数规划、1、整数规划概念、2、整数规划分类、二、整数规划示例、三、整数规划解决的核心问题、四、整数规划问题解的特征、五、整数规划问题与松弛问题示例、六、分支定界法、1、整数规划概念、2、分支定界法求解整数规划步骤、3、分支定界理论分析、七、分支过程示例、八、分支定界法求整数规划示例、1、分支定界法求整数规划示例、2、求整数规划的松弛问题及最优解、3、第一次分支操作、4、第二次分支操作、5、第三次分支操作、6、整数规划最优解

    2022年7月12日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号