监听dom变化-Mutation observers

Mutation Observers API 允许开发者统一监听DOM节点及其子节点的属性变化,提供了一种在DOM变化时异步触发回调的方式。本文介绍了其背景、使用方法及API详细说明,包括MutationRecord、观察者选项和实例方法,帮助理解如何高效地监控DOM更新。
摘要由CSDN通过智能技术生成

一、背景

通常,为了响应某个变化而执行一段逻辑,我们可以将这段逻辑的调用,放在这个变化的入口或者出口。所谓入口,是指这个变化发生的源头,所谓出口,是指这个变化发生之后走的逻辑。

这么说可能比较抽象,举个例子,页面上有个输入框,用户可以输入数字,也可能是通过后端推送的websocket更改输入框的数字,我们要在数字变化的时候触发个逻辑。有两种选择,一是入口。因为改变数字的原因,我们全都知道,所以可以监听输入框的Input事件,在这个事件里面触发对应的逻辑,同时在websocket的回调里触发对应的逻辑,此为入口触发。所谓出口,是指我们监听数字,只要数字变化,不管原因是什么,都触发对应的逻辑。比如vue里面的watch。

一般来说,在入口触发,可以更精确的控制,因为这里可以明确数据来源。在出口控制,则更加方便。这里根据实际需求来选择。

通常,在vue里面,通过框架对数据进行了双向绑定,其实就是在数据变化的出口(set方法)控制,因此可以知道数据什么时候变化了。

不过有一个小小的问题,就是dom元素。因为dom元素的属性非常多,且有自定义属性,dom又是动态的,所以vue没办法对dom做监听,我们一般只能在入口,也就是监听dom的各种事件,去触发对应的逻辑。

那么,有没有方式统一监听dom的变化呢?有的,就是Mutation observers API。这个api可以监听某个dom节点以及它的子节点的属性变化。

二、使用

来看个简单的demo

const content = document.querySelector(".content");
//观察器的配置
const option = {
  attributes: true,
  childList: true,
  characterData: true,
  subtree: true,
  attributeFilter: ["class"],
  attributeOldValue: true,
  characterDataOldValue: true,
};

/**
 * 属性变化之后触发的回调函数
 * @param {Array<MutationRecord>} mutationsList 触发的属性变化记录,是一个数组
 * @param {MutationObserver} observer 观察者
 */
const callback = function (mutationsList, observer
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值