nodetype属性通过只读数值准确标识dom节点类型,不依赖标签名或内容:元素节点为1(node.element_node),文本节点为3(node.text_node),注释节点为8(node.comment_node),文档节点为9,属性节点为2,文档片段为11。

直接看 nodeType 的数值,再对照标准常量即可准确判断——它不依赖标签名或内容,只反映节点在 DOM 规范中的本质身份。
nodeType 数值对应关系
每个节点的 nodeType 是一个只读数字,浏览器按规范统一赋值:
- 元素节点(如 、
):值为 1,对应常量
Node.ELEMENT_NODE- 文本节点(含文字、空格、换行):值为 3,对应常量
Node.TEXT_NODE- 注释节点(如 ):值为 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节点的类型不变。为什么不能只靠 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直接返回元素子节点集合(但注意它不包含文本/注释,也不响应动态插入的文本节点)
- 文本节点(含文字、空格、换行):值为 3,对应常量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











