私は簡単なループを作ろうとしています:
const parent = this.el.parentElement
console.log(parent.children)
parent.children.forEach(child => {
console.log(child)
})
しかし、私は次のエラーが出ます:
VM384:53捕捉されないTypeError:parent.children.forEachは関数ではありません
parent.children
がログに記録していても:
問題は何でしょうか。
注:これは JSFiddle です。
parent.children
は配列のようなオブジェクトです。次の解決策を使用してください。
const parent = this.el.parentElement;
console.log(parent.children);
Array.prototype.forEach.call(parent.children, child => {
console.log(child)
});
parent.children
はNodeList
型です。これは、オブジェクトに似た配列です。
length
プロパティを含みます。{0: NodeObject, 1: NodeObject, length: 2, ...}
詳しくは この記事 をご覧ください。
parent.children
は配列ではありません。それはHTMLCollectionであり、それはforEach
メソッドを持っていません。最初にそれを配列に変換することができます。例えばES6では:
Array.from(parent.children).forEach(function (child) {
console.log(child)
});
またはスプレッド演算子を使用して:
[...parent.children].forEach(function (child) {
console.log(child)
});
parent.children
はノードリスト、厳密にはhtml要素のCollectionを返します。これはobjectのような配列ですが、配列ではないので、直接配列関数を呼び出すことはできません。このコンテキストでは、Array.from()
を使ってそれを実際の配列に変換することができます。
Array.from(parent.children).forEach(child => {
console.log(child)
})
もっと素朴なバージョン、少なくとも変換とES6を使わなくてもすべてのデバイスで正常に動作することを確認:
const children = parent.children;
for (var i = 0; i < children.length; i++){
console.log(children[i]);
}
parent.children
は、配列のようなオブジェクトであるHTMLCollection
です。まず、Array.prototype
メソッドを使うには、それを実際のArray
に変換する必要があります。
const parent = this.el.parentElement
console.log(parent.children)
[].slice.call(parent.children).forEach(child => {
console.log(child)
})
なぜならparent.children
は NodeList であり、.forEach
メソッドをサポートしていないからです(NodeListは構造体のような配列ではなく配列ではないため)。まずを使ってそれを配列に変換してそれを呼び出す
var children = [].slice.call(parent.children);
children.forEach(yourFunc);
このようにNodeList
をループしようとしているなら:
const allParagraphs = document.querySelectorAll("p");
このようにループすることを強くお勧めします。
Array.prototype.forEach.call(allParagraphs , function(el) {
// Write your code here
})
個人的には、いくつかの方法を試してみましたが、そのほとんどはNodeList
をループ処理したいのでうまくいきませんでしたが、これは魅力のように機能します。試してみてください。
NodeList
は配列ではありませんが、Array.
を使用して配列として扱いますので、古いブラウザではサポートされていないことを知っておく必要があります!
NodeList
に関する詳細情報が必要ですか? MDNに関する ドキュメントを読んでください 。
forEach
は必要ありません。 from
の2番目のパラメーターのみを使用して反復できます。そのようです:
let nodeList = [{0: [{'a':1,'b':2},{'c':3}]},{1:[]}]
Array.from(nodeList, child => {
console.log(child)
});
ES6の機能( 矢印関数 )を使用しているので、単純に をループに使用することもできます このように:
for(let child of [{0: [{'a':1,'b':2},{'c':3}]},{1:[]}]) {
console.log(child)
}
これはいつも私のために働きました
const someElement = document.querySelectorAll('.someElement');
someElement.forEach((element) => {
// Your code here
});