Lær å bruke JavaScript til å finne, endre, opprette og slette HTML-elementer.
DOM-manipulering
No som du kan grunnleggjande JavaScript, er det på tide å kople språket til nettsida. DOM-manipulering handlar om å bruke JavaScript til å finne HTML-element på sida og endre dei – endre tekst, stil, leggje til nye element eller fjerne eksisterande. Dette er kjernen i interaktiv webutvikling.
Når nettlesaren lastar ei HTML-side, byggjer han opp ein Document Object Model (DOM) – ei trestruktur der kvart HTML-element er eit objekt. JavaScript kan navigere i dette treet, lese innhaldet og eigenskapane til elementa, og endre dei. Endringar i DOM-en blir reflekterte umiddelbart på skjermen, slik at brukaren ser oppdateringane utan å laste sida på nytt.
document som rotnode. JavaScript bruker DOM-en for å lese og endre nettsida dynamisk. Nettlesaren held DOM-en synkronisert med det som blir vist på skjermen – når du endrar eit element i DOM-en, blir visinga oppdatert automatisk.Før du kan endre eit element, må du finne det. JavaScript tilbyr fleire metodar for dette:
querySelector – den mest fleksible metoden
querySelector() bruker CSS-selektorar for å finne element:
// Finn det første elementet med id="overskrift"
const overskrift = document.querySelector("#overskrift");
// Finn det første elementet med klassen "info"
const info = document.querySelector(".info");
// Finn den første <p>-taggen
const avsnitt = document.querySelector("p");
// Finn det første <a>-elementet inne i en <nav>
const lenke = document.querySelector("nav a");querySelectorAll – finn alle matchande element
// Finn ALLE elementer med klassen "kort"
const alleKort = document.querySelectorAll(".kort");
// Gå gjennom alle matchende elementer
alleKort.forEach(kort => {
console.log(kort.textContent);
});getElementById – finn element med ID
const element = document.getElementById("minId");Døme med HTML
Gitt denne HTML-koden:
<h1 id="tittel">Min nettside</h1>
<p class="beskrivelse">Velkommen til siden min.</p>
<ul>
<li class="punkt">Punkt 1</li>
<li class="punkt">Punkt 2</li>
<li class="punkt">Punkt 3</li>
</ul>Kan vi finne elementa slik:
const tittel = document.querySelector("#tittel");
const beskrivelse = document.querySelector(".beskrivelse");
const allePunkter = document.querySelectorAll(".punkt");
console.log(tittel.textContent); // "Min nettside"
console.log(beskrivelse.textContent); // "Velkommen til siden min."
console.log(allePunkter.length); // 3Når du har funne eit element, kan du endre innhaldet og eigenskapane:
Endre tekst med textContent
const overskrift = document.querySelector("#tittel");
overskrift.textContent = "Ny overskrift!";Endre HTML med innerHTML
const boks = document.querySelector("#innhold");
boks.innerHTML = "<strong>Viktig:</strong> Denne teksten er <em>endret</em>.";Endre attributter
const bilde = document.querySelector("img");
bilde.src = "nytt-bilde.jpg";
bilde.alt = "Et nytt bilde";
const lenke = document.querySelector("a");
lenke.href = "https://www.nrk.no";
lenke.target = "_blank";Endre stiler direkte
const element = document.querySelector("#boks");
element.style.backgroundColor = "lightblue";
element.style.padding = "20px";
element.style.borderRadius = "10px";
element.style.fontSize = "18px"; // Merk: camelCase i stedet for bindestrekLegg merke til at CSS-eigenskapar med bindestrek (som background-color) blir skrivne med camelCase i JavaScript (backgroundColor).
Ver forsiktig med å bruke innerHTML med data frå brukarar. Dersom du set inn teksten til brukaren direkte som HTML, kan ein vondsinna brukar injisere skadeleg kode (XSS – Cross-Site Scripting):
// FARLIG – aldri gjør dette med brukerdata!
const brukerInput = '<img src="x" onerror="alert('Hacket!')">';
document.querySelector("#boks").innerHTML = brukerInput;
// TRYGT – bruk textContent for brukerdata
document.querySelector("#boks").textContent = brukerInput;Bruk textContent når du skal vise tekst frå brukarar, og innerHTML berre med innhald du har full kontroll over.
Den mest elegante måten å endre utsjånaden til element på er via CSS-klassar. I staden for å setje stilar direkte i JavaScript, definerer du klassar i CSS og legg dei til eller fjernar dei med JavaScript:
/* CSS */
.synlig { display: block; }
.skjult { display: none; }
.uthevet { background-color: yellow; font-weight: bold; }
.feilmelding { color: red; border: 2px solid red; padding: 10px; }// JavaScript
const boks = document.querySelector("#meldingsboks");
// Legge til en klasse
boks.classList.add("uthevet");
// Fjerne en klasse
boks.classList.remove("skjult");
// Veksle en klasse (legger til hvis den mangler, fjerner hvis den finnes)
boks.classList.toggle("synlig");
// Sjekke om en klasse finnes
if (boks.classList.contains("feilmelding")) {
console.log("Det er en feilmelding!");
}
// Legge til flere klasser samtidig
boks.classList.add("synlig", "uthevet");Denne tilnærminga er betre enn å endre style direkte fordi:
- CSS-koden blir halden i stilarket der han høyrer heime
- Du kan bruke CSS-animasjonar og overgangar
- Koden er lettare å lese og vedlikehalde
- Fleire stilar blir endra med éin operasjon
JavaScript kan også lage heilt nye HTML-element og leggje dei til på sida:
Opprette nye element
// Opprett et nytt <li>-element
const nyttPunkt = document.createElement("li");
nyttPunkt.textContent = "Nytt listepunkt";
nyttPunkt.classList.add("punkt");
// Legg til i en eksisterende liste
const liste = document.querySelector("ul");
liste.appendChild(nyttPunkt);Meir avansert: Byggje opp ei komplett struktur
// Lag et nytt kort-element
const kort = document.createElement("div");
kort.classList.add("kort");
const kortTittel = document.createElement("h3");
kortTittel.textContent = "Nytt kort";
const kortTekst = document.createElement("p");
kortTekst.textContent = "Dette kortet ble laget med JavaScript.";
const kortKnapp = document.createElement("button");
kortKnapp.textContent = "Les mer";
// Sett sammen strukturen
kort.appendChild(kortTittel);
kort.appendChild(kortTekst);
kort.appendChild(kortKnapp);
// Legg kortet til på siden
document.querySelector("#kortContainer").appendChild(kort);Fjerne element
// Fjern et element
const element = document.querySelector("#gammelBoks");
element.remove();
// Alternativ: Fjern et barn-element
const liste = document.querySelector("ul");
const forstePunkt = liste.querySelector("li");
liste.removeChild(forstePunkt);Erstatte element
const gammelElement = document.querySelector("#gammel");
const nyttElement = document.createElement("div");
nyttElement.textContent = "Nytt innhold";
gammelElement.replaceWith(nyttElement);Her er eit komplett døme som kombinerer DOM-metodar for å lage ei interaktiv oppgåveliste:
HTML:
<h2>Min oppgaveliste</h2>
<div>
<input type="text" id="nyOppgave" placeholder="Skriv en oppgave...">
<button id="leggTil">Legg til</button>
</div>
<ul id="oppgaveliste"></ul>
<p id="teller">Antall oppgaver: 0</p>JavaScript:
function leggTilOppgave() {
const input = document.querySelector("#nyOppgave");
const tekst = input.value.trim();
if (tekst === "") {
return; // Ikke legg til tom oppgave
}
// Opprett nytt listeelement
const li = document.createElement("li");
li.textContent = tekst;
// Opprett sletteknapp
const slettKnapp = document.createElement("button");
slettKnapp.textContent = "Slett";
slettKnapp.style.marginLeft = "10px";
slettKnapp.addEventListener("click", function () {
li.remove();
oppdaterTeller();
});
li.appendChild(slettKnapp);
document.querySelector("#oppgaveliste").appendChild(li);
// Tøm inputfeltet
input.value = "";
input.focus();
oppdaterTeller();
}
function oppdaterTeller() {
const antall = document.querySelectorAll("#oppgaveliste li").length;
document.querySelector("#teller").textContent = "Antall oppgaver: " + antall;
}
document.querySelector("#leggTil").addEventListener("click", leggTilOppgave);Dette dømet viser korleis createElement(), appendChild(), remove(), querySelector() og addEventListener() jobbar saman for å skape ei interaktiv brukaroppleving.
Utviklarverktøya til nettlesaren (F12) har ei «Elements»-fane som viser heile DOM-treet. Her kan du:
- Klikke på element for å sjå eigenskapane og stilane deira
- Redigere HTML og CSS direkte for rask testing
- Høgreklikke på eit element og velje «Copy → Copy selector» for å få CSS-selektoren
- Bruke $0 i konsollen for å referere til det valde elementet
- Bruke document.querySelectorAll("*").length i konsollen for å telje alle element på sida
Utviklarverktøya er uvurderlege for å forstå og feilsøke DOM-manipulering.
Kva er DOM-en (Document Object Model)?
Kva metode bruker du for å finne det første elementet med klassen "info"?
Kva er skilnaden mellom textContent og innerHTML?
Gitt denne HTML:
<ul id="liste">
<li>A</li>
<li>B</li>
<li>C</li>
</ul>Kva er resultatet av document.querySelectorAll("#liste li").length?
Skriv JavaScript-kode som finn eit element med id="melding" og gjer følgjande:
1. Endrar tekstinnhaldet til "Velkommen til IT1!"
2. Legg til CSS-klassen "uthevet"
3. Set bakgrunnsfargen til lyseblå
Skriv koden og forklar kva kvar linje gjer.
Skriv ein JavaScript-funksjon lagKort(tittel, beskrivelse) som opprettar ein ny <div> med klassen "kort", set inn ein <h3> med tittelen og ein <p> med skildringa, og legg kortet til i eit element med id="kortContainer". Test funksjonen med lagKort("JavaScript", "Et programmeringsspråk for webben").
Kvifor bør du unngå å setje inn brukardata med innerHTML?
Skriv JavaScript-kode som finn alle <li>-element på sida, og for kvart element som inneheld teksten "Viktig", legg til CSS-klassen "uthevet" og endrar tekstfargen til raud. Bruk querySelectorAll() og forEach().
Oppsummering
I dette kapittelet har du lært:
- DOM: representerer HTML-dokumentet som ei trestruktur av objekt.
- Finne element: querySelector, querySelectorAll og getElementById.
- Endre innhald: textContent og innerHTML.
- Endre attributt og stilar: direkte via JavaScript.
- Opprette og fjerne element: byggje dynamisk innhald.
Nøkkelomgrep
| Omgrep | Forklaring |
|---|---|
| DOM | Trestruktur som representerer HTML-dokumentet |
| querySelector | Finn første element som matchar ein selektor |
| textContent | Eigenskap for å lese/endre tekst |
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.