De querySelectorAll

De querySelectorAll

In het vorige deel heb je kunnen lezen dat je een element kan ophalen met de querySelector maar soms wil je alle elementen met dezelfde selector ophalen. In zo een geval gebruik je de querySelectorAll.
Bovenstaande tekst verraad het al een beetje natuurlijk, de querySelectorAll haalt ALLE gevonden elementen op en stopt deze in een NodeList (soort Array).

<ol class="groceries-list">
    <li class="list-item">Melk</li>
    <li class="list-item">Aardappels</li>
    <li class="list-item">Appels</li>
    <li class="list-item">Gehakt</li>
    <li class="list-item">Cola</li>
</ol>
Bovenstaand heb je een voorbeeld boodschappenlijst. We willen in JavaScript nu alle items uit deze lijst halen.
const listItems = document.querySelectorAll('.list-item');
Je hebt nu een variabele die gevuld is met een nodelist (lijst/ array) van de 5 li-elementen.

En nu loopen maar ;-)

Een querySelectorAll geeft ALTIJD een lijst terug. In tegenstelling tot de querySelector die het eerst gevonden element teruggeeft of NULL.
De lijst van de querySelectorAll kan wel een lege lijst zijn.
Maar er is altijd een lijst en je hoeft dus niet eerst een if-statement te maken om te controleren of er wel 'iets' teruggekomen is.

Je kan dus met een while of een for-loop door een element heen loopen. In het onderstaande voorbeeld gebruiken we dezelfde HTML als hierboven, dus de boodschappenlijst.

const listItems = document.querySelectorAll('.list-item');
let i = 0;
while (i < listItems.length) {
  const showItem = listItems[i];
  console.log(showItem);
  i++;
}
Bovenstaande code zal dus in de developers console 5 regels tonen met li-elementen.

Geen items gevonden?

Zoals hierboven beschreven staat, als de querySelectorAll geen elementen vindt in het document dan krijg je nog steeds een NodeList terug. Als je in je developers console de variabele toont krijg je NodeList[] te zien.
De NodeList heeft net als een array een .length attribute die je kan gebruiken, bij een lege lijst is de length 0.

Jouw JavaScript

Op de MBO-SD Fiddle site kan je meer oefenen met deze stof.

Klik hier voor de MBO-SD Fiddle site