document.createElement(), textContent, appendChild() | Tworzymy i dodajemy zadania jako nowe węzły DOM


Ok, więc wiemy już, jak uzyskać dostęp do elementu/ węzła DOM. Spróbujmy teraz stworzyć i dodać zadania do naszej listy z poziomu kodu JavaScript w konsoli. Będzie nam to potrzebne w przyszłości, by po pobraniu zadań z localStorage za pomocą JavaScript, dodać je w postaci kodu HMTL do listy.

Usuńmy najpierw ręcznie wszystkie elementy <li> z naszego kodu HTML, zapiszmy plik i odświeżmy przeglądarkę. Twoja lista w przeglądarce powinna teraz być pusta, a kod HTML powinien wyglądać tak:

<h1>Twoje zadania</h1>

<hr>

<button>dodaj zadanie</button>

<ul id="tasks-list">

</ul>

<button>wyczyść listę</button>

Teraz przejdźmy do konsoli i stwórzmy nowy element listy <li> za pomocą metody document.createElement(), przypisując go do zmiennej li (list element):

const li = document.createElement("li");

console.log(li);

Za pomocą document.createElement() możemy utworzyć dowolny znacznik HTML, podając jego nazwę ujętą w cudzysłów w nawiasach metody: document.createElement("li"). Gdybyśmy chcieli stworzyć nowy nagłówek h1, to zrobilibyśmy to tak: document.createElement("h1").

Konsola wyświetliła nam nowy element listy, który na razie "wisi w powietrzu" i nie zawiera żadnej treści pomiędzy <li></li>. Dodajmy więc teraz treść naszego zadania za pomocą właściwości textContent, która reprezentuje treść węzła DOM:

li.textContent = "zrobić kawę";

console.log(li);

Widzimy teraz w konsoli, że pomiędzy tagami <li></li> pojawiła się treść naszego zadania: <li>zrobić kawę</li>. Jak widzisz, JavaScript jest potężnym językiem programowania - ma moc tworzenia nowych elementów HTML (i nie tylko!).

Ok, mamy już ukształtowane zadanie w postaci elementu DOM, zawierającego treść, tyle że nadal nie widzimy go w przeglądarce... Żeby tak się stało, musimy teraz ten "lewitujący" w pamięci konsoli element dodać do istniejącego już drzewa DOM, a dokładniej do listy <ul id="tasks-list">. Możemy to zrobić za pomocą metody appendChild():

// najpierw uzyskujemy dostęp do listy, tak jak wcześniej:
const tasksList = document.getElementById("tasks-list");

// dodajemy wcześniej utworzony element li z przypisaną treścią do listy:
tasksList.appendChild(li); // jeśli wcześniej przeładowałeś/aś stronę, to musisz stworzyć ten element jeszcze raz

console.log(tasksList);

Udało się! Utworzyliśmy nowy element, przypisaliśmy do niego wartość, a potem dodaliśmy do istniejącego drzewa DOM za pomocą JavaScript! Zarówno w konsoli, jak i w przeglądarce widzimy, że do listy <ul id="tasks-list"> zostało dodane zadanie <li>zrobić kawę</li>.

Teraz, gdybyśmy chcieli dodać kolejne zadania, musielibyśmy za każdym razem napisać dużo kodu... Ale na szczęście znamy trochę JavaScript i wiemy, że powtarzalne zadania najlepiej jest przechowywać w postaci reużywalnych funkcji, co zrobimy za chwilę, a raczej zmodyfikujemy istniejącą już funkcję addTask().