Javascript Typescript返回具有.getElementsByCassName()的类型

Javascript Typescript返回具有.getElementsByCassName()的类型,javascript,typescript,dom,selector,Javascript,Typescript,Dom,Selector,当我在两个不同的元素上调用getElementsByClassName时,我很难理解结果中的差异: 考虑以下代码: let section:HTMLElement = document.getElementById("mainSection"); // This returns NodeListOf<Element> let blah1 = section.getElementsByClassName("blah"); // This returns HTMLCollection

当我在两个不同的元素上调用
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");
let section:HTMLElement=document.getElementById(“main节”);
//这将返回NodeListOf
设blah1=section.getElementsByClassName(“blah”);
//这将返回HTMLCollectionOf
设blah2=document.getElementsByClassName(“blah”);
为什么当我在
部分
上调用该方法时,我会得到一个
节点列表
,但当我在文档上调用它时,我会得到一个
HTMLCollection


基于,它们是否都应该返回
HTMLCollection

javascript
文档
对象只包含有效的HTML元素,这是标准的保证

但是,HTML元素(您的
选择
是)可能包含其他无效HTML的HTML元素或节点(想想纯文本,它是一个节点,但不能(合法地)在Javascript文档中单独存在)


NodeList和HTMLCollection几乎相同,但是使用传统的面向对象语言,HTMLCollection扩展了NodeList,也就是说,它可以做NodeList所能做的一切,但它也有
namedItem
方法。

我知道
HTMLElements
可以包含无效的HTML节点。但是,如果我使用的是
getElementsByCassName()
,我不是只会得到与类匹配的有效HTML元素吗?如果显式调用按类名搜索元素的方法,则无法获得纯文本返回。
getElementsByClassName
在任意元素上运行时,也可以返回SVG元素,这些元素不是HTML元素