Tuple Logo
document-object-model-dom

SHARE

Document Object Model (DOM)

Wat is het Document Object Model?

Het Document Object Model (DOM) is een programmeerbare representatie van de structuur van een webpagina. Wanneer een browser een HTML- of XML-bestand laadt, wordt dit bestand omgezet in een boomstructuur die het DOM vormt. Deze structuur maakt het mogelijk om via programmeertalen, zoals JavaScript, onderdelen van de pagina te benaderen en te manipuleren.

In het DOM wordt elk onderdeel van een webpagina, zoals koppen, alinea’s, links, knoppen en afbeeldingen, voorgesteld als een node (knooppunt) in de boom. De hele webpagina wordt gezien als een hiërarchie van geneste elementen, beginnend bij het <html>-element als de wortel van de boom.

Relatie tussen HTML en het DOM

Hoewel HTML de bron code is waarmee een webpagina wordt opgebouwd, is het DOM de versie die door de browser wordt gelezen, geïnterpreteerd en gebruikt tijdens de uitvoering. Deze DOM-structuur kan live worden aangepast, dus zelfs nadat de pagina geladen is, kan JavaScript elementen toevoegen, wijzigen of verwijderen. Dit is de basis voor interactieve webpagina’s.

Bijvoorbeeld:

<!-- HTML-code -->
<p id="voorbeeld">Hallo wereld!</p>

Via JavaScript kan deze tekst live worden aangepast:

document.getElementById("voorbeeld").textContent = "Tekst aangepast via DOM";

In dit voorbeeld wordt niet de originele HTML aangepast, maar de DOM-weergave ervan in het geheugen van de browser.

Waarom het DOM belangrijk is

Het Document Object Model is essentieel voor moderne webontwikkeling, omdat het de brug vormt tussen statische HTML-code en dynamisch gedrag op een website.

Dankzij het DOM kunnen ontwikkelaars onder andere:

Kortom: het DOM stelt ontwikkelaars in staat om webpagina’s interactief en responsief te maken, wat leidt tot een betere gebruikerservaring.

De geschiedenis en standaarden van het DOM

Het Document Object Model is ontstaan uit de behoefte om webpagina’s interactiever te maken en dynamisch aan te passen via scripts. In de beginjaren van het web was HTML vooral bedoeld om documenten te tonen, niet om ermee te interacteren. Dat veranderde toen browsers scriptingtalen, zoals JavaScript, begonnen te ondersteunen.

Korte geschiedenis van het DOM

In de jaren ‘90 ontwikkelden verschillende browsermakers hun eigen manieren om de inhoud van webpagina’s via JavaScript te manipuleren. Dit leidde tot grote verschillen in hoe het DOM werkte tussen bijvoorbeeld Netscape Navigator en Internet Explorer. Voor ontwikkelaars betekende dit extra werk: scripts moesten worden aangepast aan elke browser.

Om die fragmentatie tegen te gaan, werd er behoefte aan standaardisatie. In 1998 nam het World Wide Web Consortium (W3C) het initiatief om het DOM te definiëren als een platform- en taalonafhankelijke interface. Zo ontstond de eerste officiële DOM-specificatie: DOM Level 1.

Evolutie van de DOM-specificaties

De standaardisatie van het DOM verliep in stappen, waarbij elke versie (of "Level") nieuwe mogelijkheden toevoegde:

DOM-levelJaarBelangrijkste toevoegingen
Level 11998Basisstructuur: document, elementen, attributen
Level 22000Stijl (CSS), events, navigatie tussen nodes
Level 32004Load/save functionaliteit, ondersteuning voor XML namespaces
Living StandardDoorlopendContinue updates via de WHATWG

Sinds 2015 is de ontwikkeling overgenomen door de WHATWG (Web Hypertext Application Technology Working Group). In plaats van losse versies te publiceren, hanteren zij een living standard. Dat betekent dat de specificatie voortdurend wordt bijgewerkt, in lijn met hoe moderne browsers het DOM implementeren.

Organisaties achter de standaardisatie

De belangrijkste partijen die bijdragen aan de standaardisatie van het DOM zijn:

Door samenwerking tussen deze partijen blijft het DOM compatibel en bruikbaar in alle moderne browsers.

De structuur van de DOM-boom

Het Document Object Model wordt intern weergegeven als een hiërarchische boomstructuur, ook wel een DOM tree genoemd. Elk onderdeel van de webpagina, zoals een kop, afbeelding of alinea, is een knooppunt (node) in deze boom. Samen vormen ze de volledige structuur van het document, beginnend bij de root node (<html>).

Uitleg van de boomstructuur

De DOM-boom lijkt op een stamboom: er is een ouder-kindrelatie tussen elementen. De bovenste laag is het document-object, gevolgd door het <html>-element. Daaronder vind je <head> en <body>, die op hun beurt weer andere elementen bevatten zoals <h1>, <p>, <div> enzovoort.

Een visuele weergave:

document
 └── html
     ├── head
     │    └── title
     └── body
          ├── h1
          └── p

Ieder element is een node. Deze nodes kunnen ook zelf weer kinderen hebben, waardoor er een boomstructuur ontstaat.

Nodes: elementen, tekst en attributen

De DOM maakt onderscheid tussen verschillende soorten nodes. De drie belangrijkste zijn:

Een voorbeeld:

<p id="intro">Welkom!</p>

In de DOM ziet dit eruit als:

Hoe de hiërarchie werkt

De boomstructuur maakt het mogelijk om door het document te navigeren met relaties zoals:

Deze hiërarchie is belangrijk voor het manipuleren van de DOM met JavaScript. Door slim te navigeren en selecties te maken, kunnen ontwikkelaars specifieke onderdelen van een pagina aanpassen.

DOM en JavaScript

JavaScript is de belangrijkste programmeertaal om het Document Object Model (DOM) te manipuleren. Dankzij deze combinatie kunnen ontwikkelaars webpagina’s dynamisch update zonder dat de pagina opnieuw geladen hoeft te worden. Dit vormt de basis van interactieve websites.

Hoe JavaScript de DOM gebruikt

Wanneer een HTML-pagina wordt geladen, maakt de browser automatisch een DOM-versie aan in het geheugen. JavaScript kan deze structuur gebruiken om elementen te lezen, wijzigen, toevoegen of verwijderen. Dit gebeurt via het document-object, dat de toegangspoort is tot de gehele DOM.

Voorbeelden van veelgebruikte bewerkingen:

// Een element selecteren op ID
const titel = document.getElementById("mijnTitel");

// Tekstinhoud aanpassen
titel.textContent = "Welkom op mijn site";

// Een element verbergen
titel.style.display = "none";

Deze acties passen niet de originele HTML aan, maar de live-weergave in de browser.

Elementen selecteren

Er zijn verschillende manieren om elementen te selecteren in de DOM:

Voorbeeld:

const buttons = document.querySelectorAll(".cta-button");

Inhoud wijzigen

Met JavaScript kun je eenvoudig inhoud aanpassen:

document.querySelector("h1").textContent = "Nieuwe titel";
document.querySelector("p").innerHTML = "<strong>Vetgedrukte tekst</strong>";

Het verschil tussen textContent en innerHTML is dat textContent alleen tekst toevoegt, terwijl innerHTML HTML-elementen interpreteert.

Elementen toevoegen of verwijderen

Nieuwe elementen maken en toevoegen aan de DOM kan met deze stappen:

const nieuwElement = document.createElement("li");
nieuwElement.textContent = "Nieuw item";
document.querySelector("ul").appendChild(nieuwElement);

En verwijderen:

const teVerwijderen = document.getElementById("oudeItem");
teVerwijderen.remove();

Gebeurtenissen afhandelen

JavaScript maakt het ook mogelijk om te reageren op gebruikersinteracties via event listeners:

document.querySelector("button").addEventListener("click", function () {
  alert("Knop geklikt!");
});

Hierdoor worden webpagina’s niet alleen visueel aangepast, maar ook functioneel responsief.

DOM interfaces en objecten

Het Document Object Model is opgebouwd rond een set gestandaardiseerde interfaces, de blauwdrukken voor de objecten waarmee je werkt in de DOM. Dankzij deze interfaces kun je als ontwikkelaar op een consistente manier elementen en eigenschappen manipuleren, ongeacht de browser.

Wat zijn interfaces in het DOM?

In programmeertaaltermen is een interface een beschrijving van de eigenschappen en methodes die een object moet hebben. In het DOM definieert elke interface hoe een bepaald type node zich gedraagt.

Bijvoorbeeld:

JavaScript-objecten in de DOM volgen deze interfaces, wat betekent dat een <div>-element bijvoorbeeld automatisch toegang heeft tot alle methodes van Node, Element én HTMLElement.

Core DOM interfaces

Hier zijn enkele van de belangrijkste DOM-interfaces:

InterfaceBeschrijving
NodeBasisklasse voor elk object in de DOM-boom (elementen, tekst, attributen, etc.)
ElementVertegenwoordigt een HTML- of XML-element
HTMLElementExtensie van Element met HTML-specifieke functionaliteit
DocumentVertegenwoordigt het hele document. Via dit object begint elke DOM-interactie
EventWordt gebruikt om gebruikersinteracties zoals klikken of toetsen vast te leggen

Voorbeeld: wanneer je deze regel uitvoert...

const knop = document.querySelector("button");

...dan is knop een object dat de HTMLElement-interface gebruikt, inclusief toegang tot methodes zoals addEventListener() of eigenschappen zoals textContent.

Verschillen tussen HTML DOM en SVG DOM

Het DOM is niet beperkt tot HTML. Ook andere types documentstructuren, zoals SVG (Scalable Vector Graphics), hebben hun eigen DOM-interfaces. Dit betekent dat bepaalde eigenschappen of methodes specifiek zijn voor SVG-elementen.

Bijvoorbeeld:

const cirkel = document.querySelector("circle");
cirkel.setAttribute("r", 40); // SVG-specifieke eigenschap

Hoewel HTML- en SVG-elementen beide via het DOM toegankelijk zijn, gebruiken ze deels verschillende interfaces.

De structuur van DOM-objecten en hun interfaces maakt het mogelijk om op een betrouwbare, gestandaardiseerde manier met webpagina’s te werken, essentieel voor moderne frontend ontwikkeling.

DOM in de praktijk

Het Document Object Model is geen theoretisch concept dat alleen voor ontwikkelaarsdocumentatie bedoeld is, het is een actief onderdeel van elke moderne webbrowser. Dankzij het DOM kunnen webpagina’s reageren op gebruikersacties, content dynamisch wijzigen en visueel aanpassen zonder een volledige herlaad.

Veelgebruikte toepassingen in browsers

De meeste interacties die je als gebruiker ervaart op een website worden mogelijk gemaakt door DOM-manipulatie. Denk aan:

Dit alles gebeurt met behulp van JavaScript die de DOM leest en aanpast op basis van gebeurtenissen of data.

DOM-library’s

Hoewel moderne browsers een krachtige native DOM-API bieden, kiezen veel ontwikkelaars voor library’s die het werken met de DOM makkelijker maken. De bekendste is:

Voorbeeld:

// Native DOM
document.getElementById("titel").textContent = "Hallo";

// jQuery
$("#titel").text("Hallo");

Andere populaire tools of frameworks die gebruik maken van het DOM, maar op een hoger abstractieniveau werken:

Deze frameworks beheren zelf het DOM en zorgen voor efficiënte updates op basis van state of datawijzigingen.

Ondersteuning door browsers en layout engines

Alle grote browsers, zoals Chrome, Firefox, Safari en Edge, ondersteunen het DOM volledig volgens de specificaties van de living standard. Ze gebruiken layout engines zoals:

BrowserEngine
ChromeBlink
FirefoxGecko
SafariWebKit
EdgeBlink

Deze engines zorgen ervoor dat HTML wordt omgezet naar een renderbare visuele weergave én een bruikbare DOM-boom. Dankzij standaardisatie is de werking van de DOM in deze browsers grotendeels gelijk, al kunnen er kleine verschillen zijn in timing of performance.

Voorbeelden

Om het gebruik van het Document Object Model in de praktijk te verduidelijken, volgen hieronder twee veelvoorkomende scenario’s: het aanpassen van tekstinhoud en het toevoegen van een nieuw element aan de DOM. Elk voorbeeld bevat bijbehorende HTML en JavaScript, zodat je het direct zelf kunt testen of toepassen.

Voorbeeld 1: Tekstinhoud wijzigen

In dit voorbeeld wordt een koptekst op een pagina dynamisch aangepast met JavaScript.

HTML

<h1 id="hoofdtitel">Welkom op mijn website</h1>

JavaScript

const titel = document.getElementById("hoofdtitel");
titel.textContent = "Tekst aangepast via JavaScript";

Resultaat

De oorspronkelijke tekst "Welkom op mijn website" verandert direct naar "Tekst aangepast via JavaScript" zodra de JavaScript wordt uitgevoerd.

Voorbeeld 2: Element toevoegen aan de DOM

Hier voegen we een nieuw lijstitem toe aan een bestaande ongeordende lijst (<ul>).

HTML

<ul id="boodschappenlijst">
  <li>Brood</li>
  <li>Melk</li>
</ul>

JavaScript

const lijst = document.getElementById("boodschappenlijst");
const nieuwItem = document.createElement("li");
nieuwItem.textContent = "Eieren";
lijst.appendChild(nieuwItem);

Resultaat

De lijst bevat nu een extra item:

Deze voorbeelden laten zien hoe krachtig en toegankelijk DOM-manipulatie is. Met slechts een paar regels JavaScript kun je webpagina’s dynamisch en interactief maken.

Het belang van het Document Object Model

Het Document Object Model vormt de ruggengraat van elke moderne webpagina. Zonder het DOM zou het web statisch zijn, zonder interactie, responsiviteit of dynamiek. Doordat browsers HTML en XML omzetten in een gestructureerde boom van nodes, kunnen ontwikkelaars eenvoudig elementen selecteren, wijzigen, toevoegen of verwijderen en dat alles in realtime.

Het DOM maakt het mogelijk om gebruikerservaringen te creëren die intuïtief, snel en rijk zijn. Van simpele aanpassingen zoals het wijzigen van tekst, tot het bouwen van volledige single-page applications met frameworks zoals React, alles begint met de DOM.

Voor iedereen die websites ontwikkelt, is kennis van het DOM essentieel. Het vormt de basis voor interactie tussen code en content en is onmisbaar in front-end ontwikkeling.

Veelgestelde vragen
Wat is het Document Object Model?

Het Document Object Model (DOM) is een gestructureerde weergave van een webpagina in de vorm van een boomstructuur van nodes. Het stelt programmeurs in staat om met behulp van JavaScript pagina-inhoud dynamisch te lezen en te wijzigen.


Wat is het verschil tussen HTML en DOM?

HTML is de opmaaktaal die in de broncode van een pagina staat. De DOM is de live representatie van die HTML in het geheugen van de browser. JavaScript werkt met deze DOM, niet direct met de HTML.


Wat zijn de drie onderdelen van het DOM?

De drie belangrijkste onderdelen van het DOM zijn elementknooppunten, tekstknooppunten en attribuutknooppunten. Elementknooppunten vertegenwoordigen HTML-elementen zoals <div> of <p>, tekstknooppunten bevatten de eigenlijke tekst in die elementen en attribuutknooppunten bevatten aanvullende informatie zoals id-, klasse- of src-waarden.


Ook interessant

Nieuwsgierig geworden?

Wij vertellen je graag meer!

Contact opnemen
Tuple Logo
Veenendaal (HQ)
De Smalle Zijde 3-05, 3903 LL Veenendaal
info@tuple.nl‭+31 318 24 01 64‬
Snel navigeren
Succesverhalen