document.children VS document.childNodes

Iar*_*nov 5 html w3c dom document

Interface Document继承接口Node并指定Node.childNodes.它工作正常,但孩子们是什么?规范中没有这样的属性.

他们的工作不同.如果我们有<!doctype html>节点,document.childNodes包含它,但document.children不包含它.

Nic*_*lay 2

来自马修·弗拉申的回答

Element.children 仅返回元素子级,而 Node.childNodes 返回所有节点子级。请注意,元素是节点,因此两者都可用于元素。

<!doctype html>是一个节点,是一个 DOM 树,所以它列在 中childNodes,但它是一个 DocumentType 节点,而不是 Element,所以它不会出现在 中children

children您在查看的规范中没有找到的原因可能是因为它相对较新 - 它是在DOM4中添加的(仅在 2015 年才成为 W3C 推荐标准)。

如果你需要遍历ElementDOM 树中的 s(忽略其他节点类型——比如文本节点),你会发现children和相关的 API(first/lastElementChild、previous/nextElementSibling)更方便,但由于它们较新,旧浏览器并不普遍支持这些 API,因此您应该查阅兼容性表和/或使用 polyfill。