Wiemy już, że elementy na stronie tworzą hierarchiczne drzewo.
Aby operować na takich obiektach, musimy dobrze opanować sztukę "spacerowania" po nich.
Możemy je oczywiście wybierać za pomocą querySelector czy querySelectorAll (i podobnych), ale czasami to za mało.
Każdy element na stronie tworzy tak zwany węzeł. Takimi węzłami są nie tylko elementy, ale także tekst w nich zawarty.
Składa się on z węzłów. Węzłami są kawałki tekstu, ale i elementy, z których złożony jest html. Znając ich położenie, w łatwy sposób możemy się po nich poruszać korzystając z właściwości, które udostępnia nam każdy element.
constp=document.querySelector("p#text");//właściwości pobierające elementy htmlp.parentElement//wskazuje na nadrzędny element - div.test-cntp.firstElementChild//pierwszy dziecko będące elementemp.lastElementChild//ostatnie dziecko będące elementemp.children//[strong, span] - kolekcja dzieci elementup.children[0] //pierwsze dziecko - to samo co firstElementChildp.nextElementSibling//następny element z rodzeństwap.previousElementSibling//poprzedni element z rodzeństwa//właściwości pobierające węzłyp.parentNode//wskazuje na nadrzędny węzełp.firstChild//pierwszy node - w naszym przypadku to tekst "Mała "p.lastChild//ostatni node - "" - html jest sformatowany, wiec ostatnim nodem jest znak nowej liniip.childNodes//kolekcja wszystkich dzieci nodów - nie tylko elementów [text, strong, text, span] -p.childNodes[0] //"Mała"p.nextSibling//następny węzeł z rodzeństwap.previousSibling//poprzedni węzeł z rodzeństwa
Mała Ala miała kota
Pokaż relacje
W większości przypadków będzie nas interesować odwoływanie się do elementów html, dlatego głównymi właściwościami, które nas interesują są:
Metoda element.closest("selektor-css") idąc w górę drzewa zwraca najbliższy element który pasuje do selektora lub null jeżeli nie znajdzie żadnego pasującego elementu:
Pisząc nasze skrypty powinniśmy starać się robić to w taki sposób, by były jak najbardziej uniwersalne. Sztywne poruszanie się po drzewie nie zawsze będzie najlepszym rozwiązaniem. Struktura HTML może się zmienić (np. wymagać będzie tego stylowanie), dlatego jeżeli dana sytuacja pozwala, zamiast wielu parentElement czy podobnych, o wiele lepiej użyć jednego closest() by złapać rodzica, i ewentualnie później wyszukiwać w takim elemencie za pomocą querySelector().