MutationObserver实例中mutation三种不同突变类型的属性与方法?
2025-09-21 17:16:39 60 分享链接 开发笔记 MutationObserver
在 MutationObserver
的回调中,mutation
实际上是 MutationRecord
对象的实例,它包含了本次 DOM 突变的详细信息。MutationRecord
主要通过属性(而非方法)来提供突变数据,不同类型的突变(childList
/attributes
/characterData
)会包含不同的属性。
所有 MutationRecord
共有的核心属性
无论突变类型是什么,以下属性始终存在:
属性名 | 说明 |
---|---|
type | 突变类型,字符串值,可能为:"childList" (子节点变化)、"attributes" (属性变化)、"characterData" (文本节点内容变化)。 |
target | 受突变影响的 DOM 节点(不同类型对应不同节点): - childList :发生子节点变化的父节点;- attributes :属性变化的节点;- characterData :内容变化的文本节点。 |
按突变类型区分的特有属性
1. 当 type === "childList"
(子节点添加/移除)时
包含描述子节点变化的属性:
属性名 | 说明 |
---|---|
addedNodes | NodeList 类型,包含所有被添加的子节点(可能为空)。 |
removedNodes | NodeList 类型,包含所有被移除的子节点(可能为空)。 |
previousSibling | 被添加/移除的节点在父节点中的前一个兄弟节点(null 表示无)。 |
nextSibling | 被添加/移除的节点在父节点中的后一个兄弟节点(null 表示无)。 |
2. 当 type === "attributes"
(属性变化)时
包含描述属性变化的属性:
属性名 | 说明 |
---|---|
attributeName | 发生变化的属性名称(字符串,如 "class" 、"id" 、"data-xxx" )。 |
attributeNamespace | 若属性属于 XML 命名空间(如 SVG 属性),则返回命名空间 URI;HTML 中通常为 null 。 |
oldValue | 属性变化前的值(仅当 MutationObserver 配置了 attributeOldValue: true 时有效,否则为 null )。 |
3. 当 type === "characterData"
(文本节点内容变化)时
包含描述文本内容变化的属性:
属性名 | 说明 |
---|---|
oldValue | 文本节点变化前的内容(仅当 MutationObserver 配置了 characterDataOldValue: true 时有效,否则为 null )。 |
注意:MutationRecord
没有公开方法
MutationRecord
是一个数据记录对象,仅用于存储突变信息,因此它没有公开的方法,所有信息都通过上述属性获取。
示例:根据突变类型使用不同属性
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
console.log("突变类型:", mutation.type);
console.log("受影响的节点:", mutation.target);
if (mutation.type === "childList") {
// 处理子节点变化
console.log("添加的节点:", Array.from(mutation.addedNodes));
console.log("移除的节点:", Array.from(mutation.removedNodes));
} else if (mutation.type === "attributes") {
// 处理属性变化
console.log("变化的属性名:", mutation.attributeName);
console.log("旧值:", mutation.oldValue);
} else if (mutation.type === "characterData") {
// 处理文本内容变化
console.log("文本旧值:", mutation.oldValue);
console.log("新值:", mutation.target.nodeValue); // 新值直接从 target 取
}
}
});
通过这些属性,你可以精确判断 DOM 发生了哪种变化,以及变化的具体细节(如哪些节点被添加、哪个属性被修改等)。
最近更新
- 2025-09-22 01:46
- 可以直接在content.js里面写一个函数获取blob数据实现自定义下载吗?
- 2025-09-22 00:17
- background.js中可通过注入脚本的方法实现获取blobUrl实现自定义下载
- 2025-09-21 17:45
- 通过MutationObserver 开发chrome浏览器扩展的实例
- 2025-09-21 17:23
- MutationObserver实例中mutation.type为childList时addedNodes节点的遍历方法。
- 2025-09-21 17:21
- MutationObserver实例中mutation.type为childList时addedNodes节点的筛选方法。
- 2025-09-21 17:09
- MutationObserver实例中mutation.type为childList时addedNodes节点具体的方法与属性。
- 2025-09-21 16:56
- MutationObserver实例中mutation.type突变类型为childList时有哪些属性、方法?
- 2025-09-21 16:46
- MutationObserver实例中mutation三种不同突变类型的属性与方法?
- 2025-09-21 16:34
- MutationObserver实例中mutation.type突变类型为attributes时有哪些属性、方法?
- 2025-09-15 18:42
- 用豆包图像生成的功能批量创作小说推文的提示词