MutationObserver实例中mutation三种不同突变类型的属性与方法?
2026-03-19 02:56:26 415 分享链接 开发笔记 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 发生了哪种变化,以及变化的具体细节(如哪些节点被添加、哪个属性被修改等)。

最近更新
- 2026-04-23 17:24
- 公式:主体 + 动作 + 场景 你的豆包从此听话。
- 2026-04-18 13:43
- 推荐几种即梦AI常见的古风动漫绘画艺术风格
- 2026-04-16 13:48
- 北影教科书级|AI电影提示词精准运用方法|影视工业级落地流程
- 2026-04-14 00:25
- 最适合古风漫画非人类角色(神兽 / 器灵 / 精怪)的 AI 绘画主流风格
- 2026-04-14 00:10
- 常见的古言小说中的非人类角色设计有哪些
- 2026-04-11 00:53
- 扣子网页应用中组件绑定表达式 支持 简化版 JavaScript 语法
- 2026-04-10 12:36
- 动漫配音脚本演示(语气 + 音效 + 时长完整版)
- 2026-04-07 12:44
- 字幕文件解析并转换时间单位为微秒,输出指定格式的时间线数据
- 2026-04-07 11:30
- 通过扣子官方语音合成开发的速推版剪映小助手时间线插件
- 2026-04-07 07:51
- 基于故事文本与新国风水墨武侠动漫风格设计唐朝人物形象提示词