children属性返回只含元素节点的实时htmlcollection,无需过滤;childnodes则返回含所有节点类型的nodelist,需手动筛选。

children 属性本身就是只读的 HTMLCollection,**天然只包含元素节点(Element)**,自动过滤掉文本节点、注释节点、CDATA 节点等非元素节点。所以你不需要额外“过滤”,直接用 children 就是最快速、最标准的方式。
为什么 children 已经是纯子元素?
DOM 规范明确要求:parent.children 返回的集合中,每个成员都是 Element 类型(即标签节点),不包括:
- 空白文本节点(比如换行、缩进)
- 普通文本内容(如
<div>hello</div>中的 "hello") - HTML 注释(
<!-- ... -->) - 处理指令或 CDATA 等罕见节点
别和 childNodes 混淆
childNodes 才是包含所有子节点(含文本、注释等)的 NodeList。如果你误用了它,才需要手动过滤:
// ❌ 不推荐:先取全部再过滤(慢 + 冗余) Array.from(parent.childNodes).filter(node => node.nodeType === Node.ELEMENT_NODE); <p>// ✅ 推荐:直接 children(快 + 语义清晰) parent.children; // HTMLCollection<element></element></p>
如何安全地遍历或转换 children?
children 是类数组(HTMLCollection),不是真正的 Array,但现代用法很简洁:
- 遍历:用
for...of或扩展运算符[...children] - 查数量:
children.length - 取第一个/最后一个:`children[0]` / `children[children.length - 1]`
- 转数组(需调用数组方法时):
Array.from(children)或[...children]
兼容性与注意事项
children 在所有现代浏览器及 IE9+ 完全支持。注意两点:
- 它**实时更新**(live collection):DOM 变化会自动反映在
children中 - 如果需要静态快照(比如边遍历边删子元素),建议先转成数组:
[...parent.children]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











