news 2026/4/10 14:11:40

一文讲清楚DOM动态观察器MutationObserver的原理和使用场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文讲清楚DOM动态观察器MutationObserver的原理和使用场景

一文讲清楚DOM动态观察器MutationObserver的原理和使用场景

1. 引出

  • 前端的童鞋都应该了然一件事,不管是借助框架像vue/react/angular,还是原生开发,就是我们开发来开发去,操作来操作去,其实本质都是在对页面上的HTML内容进行CURD
  • 那既然我们是在对HTML进行CURD,那我们是不是就可以对某个元素进行观察和监听,他是否发生了变化,从而做出相应的业务处理
  • 比如我们在做前端的时候,有时候会加入一下三方框架,比如广告插件,我们原本想的是,你就只干你插件的事,不要给我变动我们页面本来的东西,结果呢,这个广告插件就是耍小聪明,偷偷往页面上插了一个button,引导用户点击跳转,从而实现引流
  • 这可不是我能接受的,靠,我的流量怎么能跑你那边去了呢
  • 又或者这个广告插件特么的可能因为商务关系不太好,给我的站点突然加了一个播放片子的视频,我靠,这可大方了
  • 所以,我们要监测一下,这家伙有没有往页面上加东西,怎么检测呢,就用DOM动态观察器,MutationObserver
  • 他能检测到DOM节点的详细变化,并且允许指定一个回调函数,在变化发生后回调执行,同时可以通过配置项,配置需要监测的内容,如下表
配置项作用
childList监听目标节点的子节点增删(如新增 / 删除
attribute监听目标节点的属性变化,如class/id/src等
characterData监听目标节点的文本内容变化,如textContent
subtree监听目标节点的所有后代节点,开启后,后代节点的变化也会被捕获
attriubteOldValue出发回调时,返回属性变化前的值
characterDataOldCalue触发回调时,返回文本变化前的值
attributeFilter指定监听某下属性,如[src,class]等,减少全量不必要的监听

2. 原理

  • 对设计模式比较了解的童鞋一眼就可以看出来,这是一个典型的观察者模式
  • 观察者:MutationObserver
  • 被观察者:目标DOM节点
  • 触发逻辑:当被观察者的DOM发生指定类型的变化时,浏览器会将变化事件加入到微任务队列,带主线程空闲时,触发观察者的回调函数,传递变化详情
  • 所以说,MutationObserver是异步的,属于微任务,浏览器会把短时间内的多次DOM变化合并为一次回调触发(采用防抖),避免频繁执行回调导致的性能问题
  • 同时,因为MutationObserver是异步的,如果你想在Observer里面访问修改后的DOM状态,比如获取尺寸,需要包裹requestAnimationFrame
  • 原理知道了,具体怎么用呢

3. 使用

  • 分三步
  • 第一步,创建observe
  • 第二步,设置配置项,也就是你需要监听的类型
  • 第三步,绑定目标DOM,开启监听
  • 第四步,触发MutationObserve
  • 第五步,关闭监听
  • 上代码
<divid="target"class="unactive"></div><script>//第一步:创建MutationObserver实例,传入回调函数constobserver=newMutationObserver((mutationList,observer)=>{/** * mutationList是所有触发的DOM变化数组,每个元素都是一个MutationRecord对象 * observer是MutationObserver实例本身,用于关闭实例等操作 */for(constmutationofmutationList){ <
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 15:46:27

2025最新!专科生必备8个AI论文平台:开题报告与文献综述全测评

2025最新&#xff01;专科生必备8个AI论文平台&#xff1a;开题报告与文献综述全测评 2025年专科生论文写作工具测评&#xff1a;从功能到体验的全面解析 随着人工智能技术在学术领域的不断渗透&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面…

作者头像 李华
网站建设 2026/4/3 14:21:48

搞砸一次发布赔了6位数后,我才明白平台工程的真正价值。

我永远忘不了那个周五晚上&#xff0c;我满怀信心地按下了发布按钮&#xff0c;然后整个系统就崩了。接下来的十几个小时&#xff0c;就是一场混乱的救火行动。回滚代码、排查日志、紧急修复&#xff0c;整个团队都被拖入了深渊。那一刻我才意识到&#xff0c;我们引以为傲的敏…

作者头像 李华
网站建设 2026/4/9 14:55:52

我们是如何用云端开发,把上线时间从1周压到3分钟的

整个技术圈都在为 AI 疯狂&#xff0c;我们讨论 Copilot 如何让编码效率提升十倍。但这可能只说对了一半&#xff0c;我们用 AI 加速了“写代码”&#xff0c;但作为工程师&#xff0c;我发现自己大量的时间&#xff0c;却消耗在了写代码之外的、那些看不见的“摩擦”上。我认为…

作者头像 李华
网站建设 2026/4/2 22:58:03

兼容性测试的边界困局与云测平台的效能天花板

——面向测试从业者的深度实践洞察 一、兼容性测试的无限边界&#xff1a;被低估的复杂性 在移动互联网与物联网融合的2025年&#xff0c;兼容性测试已从单纯的"设备-系统"适配演变为五维测试矩阵&#xff1a; 硬件拓扑维度&#xff1a;折叠屏机械结构差异、传感器…

作者头像 李华
网站建设 2026/4/9 16:51:28

‌大数据测试专项:数据质量、数据管道与计算逻辑验证

在数据驱动的时代&#xff0c;大数据测试已成为软件测试的核心领域。随着2025年AI和云计算的普及&#xff0c;数据量激增&#xff08;预计全球数据量达200ZB&#xff09;&#xff0c;测试从业者面临前所未有的挑战&#xff1a;如何确保海量数据的准确性、管道的高效性和计算逻辑…

作者头像 李华