JavaScript中DOM元素的childNodes与children区别详解

作者:交互手记

时间:2026-10-29

浏览:241

本文深入解析JavaScript中DOM元素的childNodes与children属性的核心区别。通过Chrome环境下的实际测试代码,展示两者在获取子节点时的不同表现:children仅返回元素节点,排除文本节点;而childNodes包含所有子节点,包括隐藏的TextNode。文章提供具体HTML结构对比,说明在特定布局下两者结果可能一致,并总结了对document、head、body及div等常见元素的实测结论。

文章目录

childNodes与children的核心区别

在DOM元素处理中,children属性返回的是DOM Object类型的子对象集合,它不包含标签之间隐式存在的TextNode(文本节点);而childNodes属性则包含所有子节点,包括那些在标签之间隐式存在的TextNode对象。

Chrome环境下的测试验证

为了更直观地理解children和childNodes在Chrome浏览器环境下的具体差异,我们可以进行以下测试:


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <div id="div1" class="div">
 <span id="s1" class="sp" lang="zh-cn">
 </span>
 </div>
</body>
<script type="text/javascript">
 
 function test() {
 var o = document.getElementById("div1");
 var child = o.children;
 console.log("div1.children运行结果:");
 for(i = 0; i < child.length; i++){
   console.log(child[i].tagName);
  }
 
 console.log("");
 child = o.childNodes;
 console.log("div1.childNodes运行结果:");
 for(i = 0; i < child.length; i++){
   console.log(child[i].tagName);
  }
 
 }
 
 test();

</script>
</html>

具体的测试结果如下所示:


 div1.children运行结果:
 SPAN

 div1.childNodes运行结果:
 undefined
 SPAN
 undefined

从上述childNodes集合的输出结果中可以看到存在两个undefined节点,这两个undefined实际上对应的是nodeType为3的TextNode(文本节点)。

如果将HTML代码的书写格式调整为如下紧凑样式,那么children和childNodes的返回结果将不再存在差异。


<body>
 <div id="div1" class="div"><span id="s1" class="sp" lang="zh-cn"></span></div>
</body>

经过对document、head、body以及div等常见HTML元素的实际测试,未发现其他显著差异。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章