我想迭代的结果
document.getElementsByTagName("...");
它返回一个
HTMLCollection
,而不是一个数组。所以我不能简单地使用forEach
。以下是可能的,但看起来不太好:
let elements = document.getElementsByTagName("...");
for (var i = 0, m = elements.length; i < m; i++) {
let element = elements[i];
}
对于javascript,几乎存在完全相同的问题:
For loop for HTMLCollection elements
显然,借助最新更新,现代浏览器支持:
var list = document.getElementsByClassName("events");
for (let item of list) {
log(item.id);
}
但是 typescript 编译器提示:
error TS2495: Type 'NodeListOf<HTMLParagraphElement>' is not an array type or a string type.
它仍然可以转换为适当的Javascript。它甚至知道我在这里做什么,而不仅仅是复制源代码。编译后的输出是这样的:
var elements = main_div.getElementsByTagName("p");
for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
var element = elements_1[_i];
}
很好,因为即使在较旧的浏览器上也支持生成的代码。但我想摆脱错误消息。
我的compileOptions是这样的:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"rootDir": "src",
"lib": [
"es2015",
"dom"
]
}
}
我确实尝试编辑我的lib选项。该特定功能是ES6的一部分,并且已进行了多次重做。因此,我在lib中测试了各种ecmascript版本,但找不到有效的设置。
最佳答案
如果要使用forEach,可以将其转换为数组
const elements: Element[] = Array.from(document.getElementsByTagName("..."));
elements.forEach((el: Element) => {
// do something
})
关于用于循环遍历HTMLCollection的 typescript ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53098742/