MutationObserver实例中mutation.type为childList时addedNodes节点具体的方法与属性。

2025-09-21 17:10:12 64 分享链接 开发笔记 MutationObserver

addedNodes 是一个包含新增 DOM 节点的数组(通过 Array.from() 转换而来),遍历它的方式和遍历普通数组一致。常用的遍历方法有以下几种,可根据具体需求选择:
const addedNodes = Array.from(mutation.addedNodes);

// 遍历新增节点
addedNodes.forEach((node, index) => {
  if (node.nodeType === 1) { // nodeType 为 1 表示元素节点(如 div、p 等)
    console.log('元素节点标签名:', node.tagName); // 打印标签名(如 DIV、P)
    // 可在这里添加操作,比如给节点加样式、绑定事件等
    node.classList.add('newly-added'); // 给新增元素添加类名
  }
});

在 JavaScript 中,DOM 节点(node)是构成网页结构的基本单位,不同类型的节点(如元素节点、文本节点、注释节点等)共享一些通用属性和方法,而元素节点(Element)作为最常用的节点类型,还包含额外的专属属性和方法。以下是节点的核心属性与方法分类说明:

一、通用节点属性(所有节点共享,来自 Node 接口)

这些属性适用于所有类型的节点(元素、文本、注释等)。

属性名说明
nodeType节点类型的数字标识(核心!用于区分节点类型):
- 1:元素节点(Element)
- 3:文本节点(Text)
- 8:注释节点(Comment)
- 9:文档节点(Document)
nodeName节点的名称(只读):
- 元素节点:标签名(大写,如 DIVP
- 文本节点:#text
- 注释节点:#comment
- 文档节点:#document
nodeValue节点的值(可读写):
- 元素节点:null
- 文本节点:文本内容
- 注释节点:注释内容
parentNode当前节点的父节点(只读,父节点只能是元素节点或文档节点)。
childNodes当前节点的所有子节点集合(NodeList 类型,包含文本、注释等所有子节点,只读)。
firstChild第一个子节点(NodeList 中的第一个元素,只读)。
lastChild最后一个子节点(NodeList 中的最后一个元素,只读)。
previousSibling前一个兄弟节点(同层级的上一个节点,可能是文本/注释节点,只读)。
nextSibling后一个兄弟节点(同层级的下一个节点,可能是文本/注释节点,只读)。
ownerDocument当前节点所属的文档对象(document,只读)。
isConnected布尔值,表示节点是否已插入 DOM 树中(是否与文档相连,只读)。

二、元素节点专属属性(Element 接口,继承自 Node

仅元素节点(如 <div><span> 等标签)拥有这些属性。

属性名说明
tagName元素的标签名(大写,与 nodeName 相同,如 DIV,只读)。
id元素的 id 属性(可读写,对应 HTML 中的 id="xxx")。
className元素的类名(可读写,对应 HTML 中的 class="xxx",多个类用空格分隔)。
classList元素类名的集合(DOMTokenList 类型,提供 add()remove()contains() 等方法操作类名)。
attributes元素的所有属性集合(NamedNodeMap 类型,包含 idclassdata-* 等所有属性,只读)。
innerHTML元素内部的 HTML 字符串(可读写,会解析 HTML 标签)。
outerHTML包含当前元素自身的 HTML 字符串(可读写,修改时会替换当前元素)。
textContent元素及其所有后代的文本内容(可读写,忽略 HTML 标签,只保留文本)。
style元素的行内样式对象(CSSStyleDeclaration 类型,可直接修改样式,如 node.style.color = 'red')。
dataset元素的自定义数据属性集合(对应 data-* 属性,如 data-id="1" 可通过 node.dataset.id 访问)。
offsetParent最近的已定位祖先元素(用于计算偏移量,只读)。
offsetTop/offsetLeft元素相对于 offsetParent 的顶部/左侧偏移量(只读,包含边框和滚动距离)。
clientTop/clientLeft元素的边框宽度(顶部/左侧边框,只读)。
clientWidth/clientHeight元素的可视宽度/高度(包含内容和内边距,不含边框和滚动条,只读)。
scrollTop/scrollLeft元素内部滚动条的滚动距离(可读写,用于控制滚动位置)。
scrollWidth/scrollHeight元素内容的总宽度/高度(包含不可见的滚动部分,只读)。

三、通用节点方法(所有节点共享,来自 Node 接口)

用于操作节点本身或与其他节点的关系。

方法名说明
appendChild(child)向当前节点的子节点列表末尾添加一个子节点,返回新增的子节点。
insertBefore(newNode, referenceNode)referenceNode 之前插入 newNode 作为子节点,返回 newNode
removeChild(child)移除当前节点的指定子节点,返回被移除的节点(需先确保是子节点)。
replaceChild(newNode, oldNode)newNode 替换当前节点的 oldNode 子节点,返回 oldNode
cloneNode(deep)复制当前节点:
- deep = true:复制节点及所有后代节点(深拷贝)
- deep = false:只复制节点本身(浅拷贝)
返回复制的新节点(未插入DOM)。
contains(otherNode)判断当前节点是否包含 otherNode(后代节点或自身),返回布尔值。
isEqualNode(otherNode)判断两个节点是否完全相同(结构和内容一致),返回布尔值。
normalize()合并当前节点的相邻文本节点(清理空白文本节点,优化DOM结构)。
hasChildNodes()判断当前节点是否有子节点,返回布尔值(等价于 node.childNodes.length > 0)。

四、元素节点专属方法(Element 接口,继承自 Node

用于操作元素的属性、样式或查询后代节点。

方法名说明
getAttribute(attrName)获取元素的指定属性值(如 node.getAttribute('class')),返回字符串或 null
setAttribute(attrName, value)为元素设置属性(如 node.setAttribute('id', 'new-id')),若属性存在则覆盖。
removeAttribute(attrName)移除元素的指定属性(如 node.removeAttribute('disabled'))。
hasAttribute(attrName)判断元素是否存在指定属性,返回布尔值。
querySelector(selector)根据 CSS 选择器查询当前元素的第一个后代节点(返回匹配的第一个元素,无则 null)。
querySelectorAll(selector)根据 CSS 选择器查询当前元素的所有后代节点(返回 NodeList 集合)。
getElementsByTagName(tagName)根据标签名查询当前元素的后代节点(返回 HTMLCollection 集合,动态更新)。
getElementsByClassName(className)根据类名查询当前元素的后代节点(返回 HTMLCollection 集合,动态更新)。
closest(selector)从当前节点向上查找最近的匹配 selector 的祖先节点(包括自身),返回节点或 null
matches(selector)判断当前元素是否匹配指定 CSS 选择器,返回布尔值(之前提到的筛选节点的核心方法)。
focus()使元素获得焦点(适用于表单元素、可编辑元素等)。
blur()使元素失去焦点。
scrollIntoView(option)滚动页面使元素进入可视区域(option 可配置滚动行为,如 { behavior: 'smooth' })。

五、特殊节点类型的专属属性/方法

除了通用节点和元素节点,其他类型节点(如文本节点、注释节点)也有少量专属特性:

  • 文本节点(Text)
    data 属性:等价于 nodeValue,用于获取/设置文本内容;
    splitText(offset):将文本节点从指定位置拆分为两个文本节点。
  • 注释节点(Comment)
    仅包含通用节点的属性和方法,nodeValue 为注释内容。

总结

  • 通用节点(Node)的属性和方法是所有节点的基础,用于描述节点关系和基本操作(如父子节点管理)。
  • 元素节点(Element)在 Node 基础上扩展了更多实用功能,尤其是属性操作(getAttribute)、选择器查询(querySelector)和样式控制(classListstyle)。
  • 开发中最常用的是元素节点,需重点掌握其专属属性(如 classListdataset)和方法(如 matchesquerySelector)。

根据节点类型(通过 nodeType 判断)灵活使用对应的属性和方法,可以高效操作 DOM 结构。

MutationObserver实例中mutation.type为childList时addedNodes节点具体的方法与属性。