De querySelector

De querySelector - inleiding

In het vorige hoofdstuk heb je kunnen lezen dat een HTML pagina bestaat uit elementen en dat zo een element bij het programmeren een node of een object genoemd wordt. Ook heb je gelezen dat in zo een node alle HTML-elementen/ teksten etc. zitten die in de HTML staan.

Om pagina's interactief te maken, en dus te programmeren met JavaScript, wil je die elementen kunnen selecteren, Eenmaal geselecteerd kunnen we het object gebruiken om er iets aan toe te voegen, een handeling er aan toe te voegen (bijvoorbeeld als je er op klikt met je muis) of teksten en HTML die erin zit aan te passen.

De querySelector - werking

Om dit te doen moeten we vooraf weten welke HTML we hebben op onze pagina, we nemen onderstaand voorbeeld als stuk HTML code.

<div class="change-color">
    <p>
        This is some random text
    </p>
</div>
Als we uit bovenstaande het div element met class change-color willen ophalen gebruiken we hier een querySelector voor.
const myDiv = document.querySelector('.change-color');
console.log(myDiv);
Voer bovenstaande code maar eens uit en kijk wat er in je developers console terecht komt.

De document. ?

Zoals je kan zien halen we informatie op met document.querySelector. Het eerste woord document staat voor het hele document. (denk aan de DOM uit het vorige hoofdstuk). Hierdoor wordt er gezocht in ALLE HTML onderdelen van de pagina. Je kan dit ook verkleinen maar daar komen we later wel op.

De selector

De selector is dat wat tussen de ( ) ronde haken staat. In bovenstaand voorbeeld dus '.change-color'. Deze manier van werken heb je al geleerd door het werken met CSS. Je kan op exact dezelfde manier als je met CSS aangeeft hoe een element gestyled wordt ook elementen ophalen. Een paar voorbeelden:

'.change-color' het eerste element met de class-name change-color
'h1' het eerste H1 element op de pagina
'.change-color.selected' het eerste element met zowel de class change-color als de class selected
'.change-color p het eerste p element in het element met de class-name change-color
Lees goed, het is echt altijd het eerste element wat gevonden wordt. (of niets)

Classes graag!

Zoals je gewend bent werk je met CSS bij voorkeur (en eigenlijk echt alleen maar) met classes om je styling te doen. In JavaScript geldt dat ook, dus probeer altijd je selectors te maken met een class en niet met een element of een ID.

Iets of niets...

Een querySelector geeft altijd een object (dus een HTML-element) of niets terug. Als er meerdere divs op jouw pagina staan met dezelfde class, dan haalt de querySelector het eerste element wat voldoet aan de selector (dat wat je tussen de quotjes hebt staan) op. Probeer onderstaande code maar eens uit te voeren in jouw JavaScript:

const myDiv = document.querySelector('.change-color');
console.log(myDiv);
Er vanuitgaande dat je in jouw HTML geen element hebt met de class change-color zal er in jouw developers console het woordje null komen te staan.

Gebruik een if-statement

Jouw JavaScript wordt soms over meerdere pagina's ingeladen en het kan dus voorkomen dat een element niet bestaat omdat het maar op 1 van de pagina's bestaat. Daarom is het altijd handig om te kijken of de querySelector niet null is. Dit kan en mag met een if-statement.

const myDiv = document.querySelector('.change-color');
if (myDiv) {
    console.log(myDiv);
} else {
    console.log('het element bestaat niet');
}
We controleren alleen of het element wel of niet bestaat. null is ook wel false en anders is de operator dus waar.

Jouw JavaScript

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

Klik hier voor de MBO-SD Fiddle site