当我在两个不同的元素上调用getElementsByClassName
时,我很难绕过结果的差异:
请考虑以下代码:
let section:HTMLElement = document.getElementById("mainSection");
// This returns NodeListOf<Element>
let blah1 = section.getElementsByClassName("blah");
// This returns HTMLCollectionOf<Element>
let blah2 = document.getElementsByClassName("blah");
为什么当我在section
上调用该方法时,我得到NodeList
但是当我在文档上调用它时,我得到HTMLCollection
?
根据MDN Documentation,他们都不应该返回HTMLCollection
?
答案 0 :(得分:3)
javascript document
对象只包含有效的HTML元素,这是标准的保证。
但是,HTML元素(您的selection
)可以包含其他HTML元素或节点,这些元素或节点不是有效的html(想想纯文本,它是一个节点,但不能(合法地)存在于本身在Javascript文档中。)
NodeList和HTMLCollection几乎完全相同,但是使用传统的面向对象语言,HTMLCollection扩展了NodeList,也就是说,它可以完成NodeList所能做的一切,但它也有namedItem
方法。