4

我正在寻找一种方法来获取javascriptHTMLElement中的所有孩子。HTMLElement我使用过childNodes,但我无法将 aNodeList转换为 an Array.<HTMLElement>,因为它们不是彼此的子类型(我正在使用 Google Closure Compiler 来强制键入)。

这是一个返回警告的示例:

/** @type {Array.<HTMLElement>} */
var kids = /** @type {Array.<HTMLElement>} */ (document.childNodes);

它返回

test.js:2: WARNING - invalid cast - must be a subtype or supertype
from: NodeList
to  : (Array.<(HTMLElement|null)>|null)
var kids = /** @type {Array.<HTMLElement>} */ (document.childNodes);
                                               ^

因为childNodes不是HTMLElements我能理解警告,但有解决办法吗?

=== 编辑 ===

令人惊讶的是,我将 aNode转换为HTMLElement. 问题来自将 aNodeList转换为Array.<Node>.

4

1 回答 1

4

我相信在这种情况下编译器是正确的 - NodeLists 不是数组,它们甚至都不是相关的。请参阅https://developer.mozilla.org/en-US/docs/Web/API/NodeList

您需要使用两种类型的联合来扩充您的类型定义:

/** @type {Array.<Node>|NodeList} */
var kids = document.childNodes;
于 2013-09-06T21:50:21.727 回答