結果を反復処理したい
document.getElementsByTagName("...");
これはHTMLCollection
配列ではなく を返します。したがって、 を単純に使用することはできませんforEach
。以下は可能ですが、あまり見栄えがよくありません。
let elements = document.getElementsByTagName("...");
for (var i = 0, m = elements.length; i < m; i++) {
let element = elements[i];
}
JavaScript の場合も、ほぼ同じ質問が存在します。HTMLCollection要素のforループ
そしてどうやら、最新のアップデートにより、最新のブラウザは以下をサポートするようになりました。
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];
}
生成されたコードは古いブラウザでもサポートされるので、これは素晴らしいことです。ただし、エラー メッセージは削除したいと思います。
私のコンパイラオプションは次のとおりです:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"rootDir": "src",
"lib": [
"es2015",
"dom"
]
}
}
ライブラリ オプションを編集してみました。この特定の機能は ES6 の一部であり、何度か改良されています。そのため、ライブラリ内のさまざまな ecmascript バージョンをテストしましたが、機能する設定を見つけることができませんでした。
ベストアンサー1
forEachを使用する場合は配列に変換できます
const elements: Element[] = Array.from(document.getElementsByTagName("..."));
elements.forEach((el: Element) => {
// do something
})