Z JavaScriptom in HTML DOM lahko ustvarjamo, dodajamo, odstranjujemo in zamenjujemo HTML elemente oziroma vozlišča. Tako lahko med izvajanjem programa spreminjamo samo strukturo dokumenta, ne le njegove vsebine ali sloga.
Osnovna pravila
- Nov element ustvarimo z metodo
document.createElement(). - Besedilo elementa lahko ustvarimo z metodo
document.createTextNode()ali ga nastavimo z lastnostjotextContent. - Element vstavimo v dokument z metodama
appendChild()aliinsertBefore(). - Element odstranimo z metodo
removeChild(), pri elementih pa pogosto tudi z metodoremove(). - Pri zamenjavi vozlišč mora biti pri metodi
replaceChild()pravilni vrstni red argumentov: najprej novo vozlišče, nato staro.
Ustvarjanje novega elementa
Da dodamo nov element v dokument, ga moramo najprej ustvariti. Ustvarjeni element še ni v dokumentu, dokler ga ne vstavimo v obstoječe drevo vozlišč.
<article id="clanek">
<p id="p1">To je prvi odstavek.</p>
<p id="p2">To je drugi odstavek.</p>
</article>
<script>
const odstavek = document.createElement("p");
odstavek.textContent = "To je nov odstavek.";
const element = document.getElementById("clanek");
element.appendChild(odstavek);
</script>
To je prvi odstavek.
To je drugi odstavek.
Enak učinek lahko dosežemo tudi tako, da ustvarimo besedilno vozlišče posebej in ga nato dodamo elementu:
const odstavek = document.createElement("p");
const besedilo = document.createTextNode("To je nov odstavek.");
odstavek.appendChild(besedilo);
Pozor: Lastnost textContent je za navadno besedilo pogosto preglednejša in varnejša izbira kot innerHTML, ker ne razčlenjuje kode HTML.
Dodajanje vozlišč
Metoda appendChild() doda vozlišče na konec seznama otrok. Če želimo element vstaviti pred določeno obstoječe vozlišče, uporabimo metodo insertBefore().
<article id="clanek1">
<p id="p11">To je prvi odstavek.</p>
<p id="p22">To je drugi odstavek.</p>
</article>
<script>
const odstavek = document.createElement("p");
odstavek.textContent = "To je nov odstavek.";
const element = document.getElementById("clanek1");
const prviOtrok = document.getElementById("p11");
element.insertBefore(odstavek, prviOtrok);
</script>
To je prvi odstavek.
To je drugi odstavek.
Pri sodobnih elementih lahko pogosto uporabimo tudi metodi append() in prepend(), vendar je pri razlagi osnov DOM še vedno zelo pomembno poznati appendChild() in insertBefore().
Odstranjevanje vozlišč
Klasičen način odstranitve vozlišča je metoda removeChild(), pri kateri moramo poznati starša elementa. Pri elementnih vozliščih pa je danes pogosto uporabna tudi metoda remove().
<article id="clanek2">
<p id="p111">To je prvi odstavek.</p>
<p id="p222">To je drugi odstavek.</p>
</article>
<script>
const stars = document.getElementById("clanek2");
const otrok = document.getElementById("p111");
stars.removeChild(otrok);
</script>
To je prvi odstavek.
To je drugi odstavek.
Primer sodobnejšega odstranjevanja:
const otrok = document.getElementById("p111");
otrok.remove();
Zamenjava vozlišč
Če želimo element zamenjati z drugim elementom, uporabimo metodo replaceChild(). Prvi argument je novo vozlišče, drugi pa vozlišče, ki ga zamenjamo.
<article id="clanek3">
<p id="p1111">To je prvi odstavek.</p>
<p id="p2222">To je drugi odstavek.</p>
</article>
<script>
const odstavek = document.createElement("p");
odstavek.textContent = "To je nov odstavek.";
const stars = document.getElementById("clanek3");
const otrok = document.getElementById("p1111");
stars.replaceChild(odstavek, otrok);
</script>
To je prvi odstavek.
To je drugi odstavek.
Priporočila
- Za deklaracijo spremenljivk uporabljaj
constalilet. - Pri vstavljanju navadnega besedila praviloma uporabljaj
textContent. - Pred odstranitvijo ali zamenjavo preveri, ali element res obstaja v dokumentu.
- Pri vstavljanju pred določen element pazi, da je drugi argument metode
insertBefore()veljavno referenčno vozlišče alinull. - Pri zamenjavi si zapomni vrstni red argumentov metode
replaceChild(): novo, staro.
Pomni: Metoda appendChild() ne kopira obstoječega vozlišča, ampak ga premakne. Eno vozlišče torej ne more biti hkrati na dveh mestih v dokumentu.
Pogoste napake
- Za navadno besedilo se uporabi
innerHTML, čeprav je primernejšitextContent. - Pri metodi
replaceChild()je napačen vrstni red argumentov. - Pri metodi
removeChild()se ne upošteva, da mora biti podan dejanski otrok izbranega starša. - Uporablja se
var, čeprav je v sodobni kodi praviloma primernejša uporabaletaliconst. - Predpostavi se, da dodajanje z
appendChild()ustvari kopijo vozlišča, čeprav ga v resnici premakne.