javascript - hvordan iterere over HTMLCollection?
Jeg har noen elementer i HTML-en min med klassen node-item, jeg får tilgang til dem i komponenten min ved å bruke:
let nodeItems = document.getElementsByClassName('node-item');
og når jeg logger nodeItems får jeg en HTMLCollection[] med lengde 4.
Jeg prøvde mange måter, men kan fortsatt ikke iterere over nodeItems:
1- første forsøk:
let bar = [].slice.call(nodeItems);
for (var g of bar){
console.log(g); //gives me nothing
}
2. forsøk:
for(let c of <any>nodeItems) {
console.log(c); //gives me nothing
}
Og jeg prøvde array-iterasjon og objekt-iterasjon, men fortsatt undefined eller error. prøvde også:
let nodeItems = document.querySelector(selectors);Men de samme problemene.
Svar #1
nodeItems er HTMLCollection, som er et array-lignende objekt.
Det er itererbart i moderne nettlesere. Iteratorer støttes med downlevelIteration kompilatoralternativ aktivert, i dette tilfellet vil det være:
const nodeItems = document.getElementsByClassName('node-item');
for (const c of nodeItems) {
// ...
}
Iterables kan polyfylles i eldre nettlesere. core-js tilbyr polyfyller for DOM-iterables.
Ellers kan nodeItems konverteres til en array og itereres som vanlig:
const nodeItems = Array.from(document.getElementsByClassName('node-item'));
for (const c of nodeItems) {
// ...
}
Svar #2
Bare bruk Array.from(document.getElementsByClassName('node-item')) eller spread-operatoren [...document.getElementsByClassName('node-item')] og bruk det du ellers ville brukt på et array.
Bortsett fra det, kan du også bruke en vanlig for-løkke
let nodeItems = document.getElementsByClassName('node-item');
for (let i = 0; i < nodeItems.length; i++) {
// access current element with nodeItems[i]
}
