You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何section.childNodes返回的NodeList存在额外text节点?

为什么section.childNodes会出现额外的text节点?

先明确两个属性的核心差异

  • childNodes:返回元素的所有子节点,涵盖元素节点、文本节点、注释节点等所有Node类型,不会做任何过滤。
  • children:只返回元素的子元素节点(即nodeType === 1的节点),自动排除文本、注释等非元素类型的节点。

额外text节点的来源

那些多余的text节点,本质是你HTML代码里的空白字符——包括换行符、空格、制表符这些用来格式化代码的字符。

浏览器解析HTML时,会把这些空白字符当作有效的文本节点处理,添加到父元素的子节点列表中。比如你的HTML结构大概率是这样的:

<section>
  <div class="parent"></div>
  <div class="parent"></div>
  <div class="parent-3"></div>
</section>

这里<section>标签后的换行、每个<div>之间的换行和缩进空格,都会被解析成独立的text节点,所以childNodes里就会出现7个节点(3个div + 4个空白文本节点)。

如果把代码写成无空白的紧凑形式:

<section><div class="parent"></div><div class="parent"></div><div class="parent-3"></div></section>

再打印section.childNodes,就只会得到3个div元素节点,不会有那些额外的text节点。

补充:手动过滤childNodes的元素节点

如果需要从childNodes里只保留元素节点,可以用简单的过滤逻辑:

const elementNodes = Array.from(section.childNodes).filter(node => node.nodeType === 1);

这个结果和section.children类似,但children是动态的HTMLCollection(DOM变化时会自动更新),而过滤后的是静态数组。

内容的提问来源于stack exchange,提问作者Kondaveti Charan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:28:13