Manipulacja DOM w JavaScript
JavaScript nie tylko potrafi zmieniać istniejące elementy strony, ale też dodawać nowe i usuwać te, które są już w DOM.
Tworzenie nowego elementu
Aby utworzyć nowy węzeł DOM, używamy metody document.createElement("nazwaTagu"). Tworzy ona element podanego typu, który na razie istnieje tylko w pamięci (nie jest jeszcze widoczny na stronie, dopóki go nie dodamy do DOM). Po utworzeniu możemy ustawić mu potrzebne właściwości, np. dodać tekst, a następnie wstawić go do dokumentu.
Dodawanie do DOM realizujemy np. poprzez rodzic.appendChild(element), co dodaje nasz nowy element jako dziecko wskazanego elementu rodzica (na koniec listy dzieci). Można też użyć parentElement.insertBefore(newElem, referenceElem) aby wstawić w konkretne miejsce. Na razie skupmy się na appendChild, bo to najprostsze rozwiązanie.
Przykład: dodawanie elementu listy
Dodawanie nowego elementu listy <li> do istniejącej listy <ul id="lista">:
<ul id="lista">
<li>Istniejący element</li>
</ul>
Skrypt:
let lista = document.getElementById("lista");
let nowyElement = document.createElement("li");
nowyElement.textContent = "Nowy element listy";
lista.appendChild(nowyElement);
Po wykonaniu tego kodu w strukturze HTML pojawi się dodatkowy <li> z podanym tekstem (jako ostatni element listy <ul>). Możemy dynamicznie tworzyć w ten sposób dowolne elementy: paragrafy, przyciski, nagłówki — cokolwiek potrzebujemy.
Usuwanie elementu
Jeśli chcemy pozbyć się jakiegoś węzła z DOM, możemy to zrobić na kilka sposobów. Najprostszy z nich to metoda element.remove(), która usuwa dany element z jego rodzica. Wystarczy mieć referencję do obiektu (np. uzyskaną przez getElementById) i wywołać remove(). Alternatywnie można wywołać rodzic.removeChild(child) na rodzicu, wskazując które dziecko usunąć.
Przykład: usuwanie elementu
Usuńmy pierwszy element listy (załóżmy, że ma on atrybut id="doUsuniecia"):
let doUsuniecia = document.getElementById("doUsuniecia");
doUsuniecia.remove();
Po tym wywołaniu element o danym id zniknie z DOM (zostanie usunięty wraz z ewentualnymi potomkami). Należy pamiętać, że referencja doUsuniecia nadal istnieje w naszym skrypcie, ale wskazuje już na obiekt, który nie jest w DOM.
Dynamiczne listy i interfejsy
Łącząc tworzenie elementów, ich modyfikowanie i obsługę zdarzeń, możemy budować interaktywne listy czy galerie. Przykładowo, możemy pozwolić użytkownikowi dodawać elementy do listy (np. zadań do zrobienia) poprzez wpisanie tekstu i kliknięcie przycisku "Dodaj". Każdy taki element można też wyposażyć np. w przycisk "Usuń", który po kliknięciu usunie dany element (wykorzystując remove()). Takie mechanizmy zrealizujemy w praktyce w mini-projektach.
Ćwiczenia
-
Za pomocą
createElementstwórz nowy element, np. paragraf<p>z jakimś tekstem. Następnie dodaj go do istniejącego elementu na stronie, np. dodocument.body.appendChild(...)lub do innego kontenera. Sprawdź, czy nowy element pojawił się w strukturze DOM (np. używając konsoli deweloperskiej w zakładce Elements). -
Dodaj do HTML pusty element kontenerowy, np.
<div id="kontener"></div>. W skrypcie poprzez pętlę stwórz kilka nowych elementów (np. 5 x<span>z kolejnymi numerami) i dodaj je kolejno do tego kontenera. Efektem powinno być dynamiczne wypełnienie kontenera nowymi elementami (np. liczbami od 1 do 5). -
Wykorzystaj
element.remove()do usunięcia jakiegoś elementu na stronie. Możesz np. dodać w HTML przykładowy element z id, a następnie w JS pobrać go i usunąć. Po wykonaniu skryptu sprawdź (wizualnie lub w konsoli DOM), że element zniknął. -
(Rozszerzenie) Spróbuj stworzyć prosty mechanizm dodawania elementów przez użytkownika: dodaj w HTML
<input type="text" id="wejscie">oraz przycisk<button id="dodajBtn">Dodaj</button>. Napisz skrypt, który po kliknięciu przycisku pobierze wartość z pola tekstowego (input.value) i utworzy nowy element (np.<li>) z tą treścią, dodając go do listy<ul>na stronie. (To zadanie łączy wiele zagadnień: operacje na DOM, zdarzenia, tworzenie elementów i odczyt wartości inputu — będzie świetną powtórką!)