为什么document.getElementsBy__方法不返回HTMLCollection?

Web*_*ner 12 html javascript dom nodelist

为什么不getElementsByName,getElementsByTagName并且getElementsByClassName返回HTMLCollection(W3C,MDN)而不是NodeList(W3C,MDN)?

这三个都只返回一个只有元素的实时NodeList:

document.getElementsByName('nameAttrVal');
document.getElementsByTagName('div');
document.getElementsByClassName('space separated classes');
Run Code Online (Sandbox Code Playgroud)

NodeLists很棒,但是HTMLCollection更具体,因为它们只能包含HTML元素.看起来这对于那些方法来说是完美的.

创建集合时,过滤器和根与集合相关联.

例如,当创建document.images属性的HTMLCollection对象时,它与仅选择img元素并以文档根目录为根的过滤器关联.

然后,该集合表示以集合根为根的子树的实时视图,仅包含与给定过滤器匹配的节点.视图是线性的.在没有相反的特定要求的情况下,集合中的节点必须按树顺序排序.

- 关于收藏的W3C

HTMLCollection已经使用了几个地方:

document.images
element.children
Run Code Online (Sandbox Code Playgroud)

NB: querySelectorAll返回非现场直播NodeList.

Tel*_*lic 2

HTMLCollection 很大程度上只包含在 DOM 规范中,以记录引入 DOM 之前大多数浏览器的工作方式。它仅在 HTML 上下文中有意义,而 DOM 是为 HTML 和 XML 一致工作而构建的。DOM 的实现可以省略 HTMLCollection 及其所有用途,但仍然被认为是一致的;浏览器选择保留它是为了保持与旧网站的向后兼容性。