带有.getElementsByClassName()的Typescript返回类型

时间:2017-06-23 20:29:44

标签: javascript typescript dom selector

当我在两个不同的元素上调用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

1 个答案:

答案 0 :(得分:3)

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

但是,HTML元素(您的selection)可以包含其他HTML元素或节点,这些元素或节点不是有效的html(想想纯文本,它是一个节点,但不能(合法地)存在于本身在Javascript文档中。)

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