Typescript 使用 .getElementsByClassName() 返回类型

Mar*_*zzo 4 javascript dom selector typescript

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");
Run Code Online (Sandbox Code Playgroud)

为什么当我在 on 上调用该方法时,section我得到一个NodeList,但是当我在 document 上调用它时,我得到一个HTMLCollection

根据MDN 文档,它们不应该都返回一个 吗HTMLCollection

Kyl*_*ker 5

javascriptdocument对象仅包含有效的 HTML 元素,这是标准的保证。

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

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

  • `getElementsByClassName` 在任意元素上运行时也可能返回 SVG 元素,这些元素不是 HTML 元素 (3认同)