Deo zbornika Učimo Javascript
Dodavanje elemenata u DOM
DOM elementi se mogu dinamički kreirati i dodavati na razne načine.
Bitna razlika između različitih načina dodavanja elemenata je što u nekim slučajevima možemo dodavati slušače događaja na elemente, a u nekim ne.
Kreiranje DOM objekata
Da bismo kreirali nove čvorove, možemo koristiti document metode createElement() i createTextNode(). Nakon što kreiramo nove čvorove, možemo ih dodati u DOM stablo pomoću metoda appendChild(), insertBefore() ili replaceChild().
Glavna prednost ove metode je mogućnost dodavanja slušače događaja na novokreirani element.
Dodavanje preko appendChild metode
Pomoću appendChild metode možemo dodati novi čvor DOM stablu. Kad ovaj metod pozovemo sa nekog DOM elementa, biće mu kreiran još jedan „potomak“.
Na primer, ovako kreiramo elemenat i dodajemo ga pomoću appendChild metode, na klik:
<style>
.kvadrat {
background-color: red;
width: 50px;
height: 50px;
display: inline-block;
margin: 5px;
}
</style>
<button id="dugme">Dodaj kvadrat</button>
<div id="drzac"></div>
<script>
const drzac = document.getElementById('drzac')
const dugme = document.getElementById('dugme')
function dodajKvadrat() {
const kvadrat = document.createElement('div')
kvadrat.setAttribute('class', 'kvadrat')
kvadrat.addEventListener('click', () => alert('zdravo'))
drzac.appendChild(kvadrat)
}
dugme.addEventListener('click', dodajKvadrat)
</script>
Za veću kontrolu nad tačnom lokacijom postoji metod insertBefore(), koji umeće novi čvor pre tačno određenog elementa.
Kreiranje HTML tagova unutar strune
Prednost ovog pristupa je mogućnost pravljenja kompleksnih HTML oznaka pomoću višelinijskih struna, a nedostatak je što elementima ne možemo dodavati događaje.
Dodavanje preko innerHTML atributa
Svojstvo innerHTML vraća ili postavlja HTML nekog elementa.
Na primer, možemo dodati HTML praznom elementu:
<div id="drzac"></div>
<script>
const drzac = document.getElementById('drzac')
drzac.innerHTML = '<h2>Zdravo Svete</h2>'
</script>
Dodavanje preko insertAdjacentHTML metode
HTML elemente u stringu takođe možemo dodati pomoću insertAdjacentHTML metode:
<h2 id="naslov">Dodavanje elementa u DOM</h2>
<script>
const naslov = document.getElementById('naslov')
const sablon = `
<div>
<h3>Slučajna slika</h3>
<img src='http://lorempixel.com/400/200/'>
<p>Lorem Pixel je sajt za uključenje nasumičnih slika.</p>
</div>
`
naslov.insertAdjacentHTML('afterend', sablon)
</script>