nodeType属性通过只读数值准确标识DOM节点类型,不依赖标签名或内容:元素节点为1(Node.ELEMENT_NODE),文本节点为3(Node.TEXT_NODE),注释节点为8(Node.COMMENT_NODE),文档节点为9,属性节点为2,文档片段为11。

直接看 nodeType 的数值,再对照标准常量即可准确判断——它不依赖标签名或内容,只反映节点在 DOM 规范中的本质身份。
nodeType 数值对应关系
每个节点的 nodeType 是一个只读数字,浏览器按规范统一赋值:
- 元素节点(如 <div>、<p>):值为 1,对应常量
Node.ELEMENT_NODE - 文本节点(含文字、空格、换行):值为 3,对应常量
Node.TEXT_NODE - 注释节点(如 <!-- hello -->):值为 8,对应常量
Node.COMMENT_NODE - 其他常见值:文档节点(
9)、属性节点(2)、文档片段(11)等
用法示例与注意事项
判断时推荐使用常量而非硬编码数字,语义清晰且便于维护:
if (node.nodeType === Node.ELEMENT_NODE) { /* 处理元素 */ }if (node.nodeType === Node.TEXT_NODE) { console.log(node.textContent); }if (node.nodeType === Node.COMMENT_NODE) { console.log('发现注释:', node.nodeValue); }
注意:nodeType 不会因节点内容变化而改变。比如一个空 <div></div>,它的 nodeType 仍是 1;即使里面后来插入了文本,文本本身是新的 TEXT_NODE 节点,原 div 节点的类型不变。
立即学习“Java免费学习笔记(深入)”;
为什么不能只靠 nodeName 或 innerHTML 判断?
因为这些属性容易产生误导:
-
nodeName对文本节点返回"#text",对注释节点返回"#comment",看似可用,但它只是字符串映射,不是类型定义依据 -
innerHTML在文本节点或注释节点上不可用或返回空/undefined,无法作为判断入口 - 只有
nodeType是 DOM 标准中明确定义的类型标识,稳定、跨浏览器、无歧义
实战小技巧:安全遍历子节点
例如遍历 element.childNodes 时,常混有空白文本节点。可这样过滤出纯元素节点:
for (const child of element.childNodes) { if (child.nodeType === Node.ELEMENT_NODE) { /* 只处理标签 */ } }- 更简洁写法:
element.children直接返回元素子节点集合(但注意它不包含文本/注释,也不响应动态插入的文本节点)


















