MutationObserver-基本使用
admin
2024-04-08 17:56:26
0

1. MutationObserver用来监视 DOM 变动

MutationObserver用来监视 DOM 变动。DOM 的任何变动,比如节点的增减、属性的变动、文本内容的变动都会触发MutationObserver事件。

2. Mutation Observer 是异步触发

但是,它与事件有一个本质不同:事件是同步触发,也就是说,DOM 的变动立刻会触发相应的事件;Mutation Observer 则是异步触发,DOM 的变动并不会马上触发,而是要等到当前所有 DOM 操作都结束才触发。
Mutation Observer 有以下特点:

它等待所有脚本任务完成后,才会运行(即异步触发方式)。
它把 DOM 变动记录封装成一个数组进行处理,而不是一条条个别处理 DOM 变动。
它既可以观察 DOM 的所有类型变动,也可以指定只观察某一类变动。

3.MutationObserver 构造函数


var observer = new MutationObserver(function (mutationRecoards, observer) {// mutationRecoards变动数组// observer 观察者实例
});

构造函数接收一个回调函数,回调函数有两个参数,一个变动数组,第二个是观察者实例。

4.MutationObserver 的实例方法

1. observe(node, config)

启动监听,它接受两个参数。
第一个参数:所要观察的 DOM 节点
第二个参数:一个配置对象,指定所要观察的特定变动
配置对象如下:

childList:子节点的变动(指新增,删除或者更改)。
attributes:属性的变动。
characterData:节点内容或节点文本的变动。
subtree:布尔值,表示是否将该观察器应用于该节点的所有后代节点。
attributeOldValue:布尔值,表示观察attributes变动时,是否需要记录变动前的属性值。
characterDataOldValue:布尔值,表示观察characterData变动时,是否需要记录变动前的值。
attributeFilter:数组,表示需要观察的特定属性(比如[‘class’,‘src’])。
// 开始监听文档根节点(即标签)的变动
mutationObserver.observe(document.documentElement, {attributes: true,characterData: true,childList: true,subtree: true,attributeOldValue: true,characterDataOldValue: true
});

对一个节点添加观察器,就像使用addEventListener方法一样,多次添加同一个观察器是无效的,回调函数依然只会触发一次。但是,如果指定不同的options对象,就会被当作两个不同的观察器。

2. disconnect()

disconnect方法用来停止观察。调用该方法后,DOM 再发生变动,也不会触发观察器。

3. takeRecords()

用来清除变动记录,即不再处理未处理的变动。该方法返回变动记录的数组。

MutationRecord 对象

DOM 每次发生变化,就会生成一条变动记录(MutationRecord 实例)。该实例包含了与变动相关的所有信息。Mutation Observer 处理的就是一个个MutationRecord实例所组成的数组。
MutationRecord对象包含了DOM的相关信息,有如下属性:

type:观察的变动类型(attribute、characterData或者childList)。
target:发生变动的DOM节点。
addedNodes:新增的DOM节点。
removedNodes:删除的DOM节点。
previousSibling:前一个同级节点,如果没有则返回null。
nextSibling:下一个同级节点,如果没有则返回null。
attributeName:发生变动的属性。如果设置了attributeFilter,则只返回预先指定的属性。
oldValue:变动前的值。这个属性只对attribute和characterData变动有效,如果发生childList变动,则返回null。

相关内容

热门资讯

广东工行:制造业贷款余额近45... 2月24日,广东省高质量发展大会顺利召开,会议以“制造业与服务业协同发展”为主题,对广东产业融合发展...
可靠股份“开除”独董引争议,董... 可靠股份(301009.SZ)日前发布《关于解除公司独立董事职务的公告》称,独立董事景乃权丧失独立性...
SHEIN创始人许仰天罕见公开... 界面新闻记者 | 黄姗 界面新闻编辑 | 许悦 2月24日,跨境快时尚电商公司SHEIN希音创始...
雷军春节同款滑雪服意外出圈 3... 快科技2月24日消息,近日,小米创办人、董事长兼CEO雷军晒出春节滑雪照,引发网友热议。 有眼尖网...
盛合晶微科创板IPO成功过会! 2月24日,上海证券交易所上市审核委员会2026年第6次审议会议召开,审议结果显示,盛合晶微半导体有...
商道创投网·会员动态|华封集芯... 《商道创投网》2026年2月24日从官方获悉:北京华封集芯电子有限公司(以下简称"华封集芯")近日完...
原创 乌... 欧洲的能源局势再次迎来剧变。刚刚从友谊管道断供的阴影中稍作喘息,匈牙利和斯洛伐克又宣布暂停向乌克兰供...
再添1家,郑州“商转公贷款”直... 据郑州发布消息,2月24日,从郑州市住房公积金管理中心获悉,中国工商银行股份有限公司郑州商都路支行已...
原创 北... 北京北边这片地方,原来是农田和废弃地带。1998年,昌平区东小口镇被定为经济适用房重点开发区。次年,...
春节期间上海口岸进出境旅客超1... 本文转自【澎湃新闻】; 2月24日,澎湃新闻记者从上海海关获悉,2026年春节期间(2月15日-2月...
深圳诞生首家百亿级具身智能独角... 深圳商报·读创客户端首席记者 袁静娴 2月23日,全球机器人基础模型龙头企业智平方宣布完成B轮融资,...
原创 能... 在全球政治经济的博弈中,乌克兰再次进入了国际舆论的焦点。这一次,泽连斯基似乎采取了一个不容忽视的战略...
2.24犀牛财经晚报:27只基... 27只基金密集提示溢价风险 多只QDII与LOF产品在列 马年A股首个交易日,27只基金集中发布溢价...
阳光财险:护航餐饮安全 守护舌... 又是一年新春佳节来临,餐饮消费迎来旺季。阳光财险将专业、贴心服务融入新春餐饮消费场景,通过食品安全责...
外媒:美投资者撤离华尔街步伐加... 参考消息网2月24日报道据路透社2月20日报道,在美国科技巨头的回报逐渐减少、而表现更优的海外市场愈...
原创 欧... 如今的欧洲,正面临前所未有的困境。名义上,欧盟依然是全球第二大经济体,但实际上,欧盟内部早已四分五裂...
BAT冲进“亿级俱乐部”,AI... 文 | 硅基研究室 Judy 如果说2025年的春节,是DeepSeek这匹黑马的独舞,让“模型”...
原创 激... 激活民营经济一池春水 ——写在湖南“新春第一会”召开之际 长沙晚报掌上长沙2月24日讯 据湖南日报...
原创 急... 隔夜,现货黄金一度上涨超2%或超110美元,突破5200美元关口,刷新日高至5237.54美元。此前...
还说别人蒸馏?马斯克抨击Ant... 凤凰网科技讯 北京时间2月24日,对于美国AI创业公司Anthropic指控其他公司“蒸馏”其模型一...