将NodeList转换为数组。<htmlelement>在javascript </htmlelement>中

时间:2013-09-06 08:49:15

标签: javascript google-closure-compiler google-closure

我正在寻找一种方法来获取javascript中HTMLElement的所有孩子HTMLElement。我使用了childNodes,但我无法将NodeList转换为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,我可以理解警告但有解决方法吗?

===编辑===

令人惊讶的是,我将Node投射到HTMLElement没有问题。问题来自于将NodeList转换为Array.<Node>

1 个答案:

答案 0 :(得分:4)

我认为在这种情况下编译器是正确的 - NodeLists不是Arrays,也不是它们相关的。见https://developer.mozilla.org/en-US/docs/Web/API/NodeList

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

/** @type {Array.<Node>|NodeList} */
var kids = document.childNodes;