Poznajemy cztery ważne metody klasy Element, służące do wstawiania węzłów w różne miejsca danego elementu. Do dzieła.
Ok, rzućmy okiem na ten markup:
<ul id="people">
People:
<li>Jane Doe</li>
<li>John Doe</li>
<li>John the Last</li>
</ul>
Teraz go sobie okroimy:
<ul id="people">
<li>Jane Doe</li>
<li>John Doe</li>
</ul>
I spróbujemy odtworzyć używając metod append i prepend:
let ul = document.querySelector("#people");
let textNode = document.createTextNode("People: ");
ul.prepend(textNode);
let li = document.createElement("li");
li.appendChild(document.createTextNode("John the Last"));
ul.append(li);
Wyjaśnijmy:
- prepend umieszcza węzeł wewnątrz elementu przed jakąkolwiek treścią (jako first child)
- append umieszcza węzeł na końcu wewnątrz elementu na końcu
- appendChild to metoda klasy node, już ją poznaliśmy wcześniej, dodaje dziecko-węzeł do elementu, wykonana wielokrotnie dodaje zawsze na końcu, zaś chainowana dodaje kolejne dzieci rekurencyjnie
- mieliśmy też insertBefore jako metodę klasy node, wywołujemy na węźle i podajemy co dodać oraz przed czym
W klasie element mamy jeszcze dwie metody, które mogą nam się przydać, before oraz after:
let heading = document.createElement("h1");
heading.textContent = "Header before element";
ul.before(heading);
let para = document.createElement("p");
para.textContent = "Para after element";
ul.after(para);
Teraz nasz markup wygląda tak:
<h1>Header before element</h1>
<ul id="people">
People:
<li>Jane Doe</li>
<li>John Doe</li>
<li>John the Last</li>
</ul>
<p>Para after element</p>
Przypomnijmy:
- appendChild i insertBefore to metody klasy node
- appendChild dodaje dziecko (element bądź inny węzeł) do elementu
- appendChild chainowane dodaje dzieci rekurencyjnie
- appendChild wywołane kilka razy będzie dodawać kolejne dzieci na końcu
- insertBefore wywołujemy na node, na której pracujemy i przekazujemy jej node do dodania, oraz node, przed którą mamy dodać
- appendChild i insertBefore są dostępne na elementach HTML, ponieważ każdy HTMLElement dziedziczy z node (i element i eventtarget)
- append i prepend to metody klasy Element, podobnie before i after
- append dodaje na końcu tego elementu
- prepend dodaje na początku tego elementu
- before dodaje przed tym elementem
- after dodaje po tym elemencie