Deo zbornika Učimo Javascript
Kretanje po DOM stablu
Možemo se kretati po DOM stablu nagore i nadole, počev od korenskog elementa, pomoću childNodes, parentNode i drugih svojstava.
Korenski documentElement
Svi XML dokumenti imaju korenski čvor koji obuhvata ostatak dokumenta. U HTML dokumentima korenski čvor je tag <html>. Njemu možemo prestupiti preko svojstva documentElement objekta document:
document.documentElement
Svi čvorovi imaju svojstva nodeName i tagName, koja sadrže naziv taga:
console.log(document.documentElement.nodeName)
console.log(document.documentElement.tagName)
Roditelji i deca
Da bismo saznali da li čvor ima „potomke“, možemo upotrebiti metod hasChildNodes():
document.documentElement.hasChildNodes()
HTML element ima tri „potomka“: head, body i razmak između njih (razmak se uzima u obzir u većini pregledača, ali ne u svim). Potomcima možemo pristupiti pomoću kolekcije childNodes na sledeći način:
document.documentElement.childNodes.length
document.documentElement.childNodes[0]
document.documentElement.childNodes[1]
document.documentElement.childNodes[2]
Bilo koje dete može da pristupi roditelju pomoću svojstva parentNode:
document.documentElement.childNodes[1].parentNode
Prethodni i naredni čvor
nextSibling() i previousSibling() su još dva pogodna svojstva za kretanje po DOM stablu, nakon što izaberemo element. Na primer:
const pasus = document.getElementByld('pasus')
pasus.nextSibling
pasus.previousSibling
pasus.previousSibling.previousSibling
Ako želimo da ignorišemo prazne čvorove, tekst bez tagova ili komentare, možemo koristiti metode nextElementSibling() i previousElementSibling().
Prvo i poslednje dete
Svojstva firstChild i lastChild su takođe dostupna. Možemo ih, na primer, isprobati na čvoru body:
document.body.firstChild
document.body.lastChild
Svojsvo firstChild je isto kao svojstvo childNodes[0], a lastChild je isto kao childNodes[childNodes.length - 1].
Rekurzija
Ukoliko želimo da prođemo sve čvorove stabla, potrebno je koristiti rekurziju.
Naredna funkcija prima početni čvor, i rekurzivno se kreće po DOM stablu, na sledeći način:
function prodjiDOM(cvor) {
do {
console.log(cvor)
if (cvor.hasChildNodes()) {
prodjiDOM(cvor.firstChild)
}
} while (cvor = cvor.nextSibling)
}
prodjiDOM(document.body)
Literatura
- Ved Antani, Stojan Stefanov, Objektno-orjentisan JavaScript, Beograd, 2017.