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 | 节点的名称(只读): - 元素节点:标签名(大写,如 DIV 、P )- 文本节点: #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 类型,包含 id 、class 、data-* 等所有属性,只读)。 |
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
)和样式控制(classList
、style
)。 - 开发中最常用的是元素节点,需重点掌握其专属属性(如
classList
、dataset
)和方法(如matches
、querySelector
)。
根据节点类型(通过 nodeType
判断)灵活使用对应的属性和方法,可以高效操作 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
- 用豆包图像生成的功能批量创作小说推文的提示词