为什么不要getElementsByName
,getElementsByTagName
和getElementsByClassName
返回HTMLCollection
(W3C,MDN)而不是NodeList
(W3C,MDN)?
这三个都只返回一个只有元素的实时NodeList:
document.getElementsByName('nameAttrVal');
document.getElementsByTagName('div');
document.getElementsByClassName('space separated classes');
NodeLists很棒,但HTMLCollection
更具体,因为它们只能包含HTML元素。看起来这对于那些方法来说是完美的。
创建集合时,会关联过滤器和根 集合。
例如,当document.images的HTMLCollection对象时 属性已创建,它与仅选择的过滤器相关联 img元素,并根植于文档的根目录。
然后,该集合代表以root为根的实时视图 集合的根,只包含与给定节点匹配的节点 过滤。视图是线性的。在没有具体要求的情况下 相反,集合中的节点必须在树中排序 顺序。
已经使用了几个地方HTMLCollection
:
document.images
element.children
NB: querySelectorAll
返回非实时NodeList
。
答案 0 :(得分:2)
HTMLCollection主要仅包含在DOM规范中,用于记录大多数浏览器在引入DOM之前的工作方式。它只在HTML的上下文中有意义,而DOM的构建是为了一致地为HTML和XML工作。允许DOM的实现省略HTMLCollection及其所有用途,并且仍然被认为是符合要求的;浏览器选择保持它以保持与旧网站的向后兼容性。
答案 1 :(得分:-2)
因为可以存在更多具有相同名称或类名的标签html元素,并且可以将其作为DOM对象操作,而不是作为html类型
“从集合”返回ID或名称 name 的第一个项目。 W3C
如果您尝试捕获事件或修改它,就像在特定节点中添加属性一样,您可以通过Id或 name 集合
选择它