DOM Operationen =============== DOM-Elemente erstellen & einfügen --------------------------------- Über ``document.createElement()`` lässt sich ein neues Element im Speicher erzeugen. Dieses kann im Speicher weiter definiert werden. .. code-block:: javascript const unorderedList = document.querySelector("ul"); let item = document.createElement("li"); console.log(item); .. hint:: Jedes Element hat eine Constructor-Funktion, über welche ebenfalls ein entsprechendes Element erstellt werden kann. .. important:: Ein Element sollte zuerst fertig definiert werden bevor es dem DOM hinzugefügt wird. Über ``[node].appendChild()`` in den DOM eingefügt werden. Die Funktion muss auf dem **Elternelement** angewandt werden und wird als **letzter Kind-Knoten** eingefügt. Das eingefügte Element wird als Rückgabewert zurückgegeben. .. code-block:: javascript unorderedList.appendChild(item); // gibt 'item' zurück console.log(item); DOM-Element duplizieren ----------------------- Soll ein ähnliches, bereits vorhandenes Element hinzugefügt werden, kann über ``[node].cloneNode()`` eine Kopie eines Knotens duplizieren. Wird das ``deep`` Argument als ``true`` übergeben, wird der gesamte Inhalt des Knotens (inklusive Textinhalt und aller möglichen Child-Nodes) mit dupliziert. .. code-block:: javascript const unorderedList = document.querySelector("ul"); let firstItem = unorderedList.querySelector("li"); let item = firstItem.cloneNode(true); item.classList.add("cloned"); unorderedList.appendChild(item); .. hint:: Event-Handler von Nodes werden **nicht** dupliziert. Knoten verschieben ------------------ Über ``.appendChild()`` kann ebenso ein bereits in der DOM vorhandenes Element als letzter Kind-Knoten eines Eltern-Knotens verschoben werden. .. code-block:: javascript const unorderedList = document.querySelector("ul"); // zweites Element (CSS zählt von 1) let item = unorderedList.querySelector("li:nth-of-type(2)"); console.log(item); unorderedList.appendChild(item); // letztes Element Knoten löschen -------------- Über ``[node].remove()`` wird ein Element aus dem DOM gelöscht und die Referenz auf das Element im Speicher zurückgegeben. Jedoch bleiben mögliche Referenzen im Speicher erhalten. .. code-block:: javascript const unorderedList = document.querySelector("ul"); let delItem = unorderedList.querySelector("li"); delItem.remove(); // lösche aus DOM console.log(delItem); // delItem is still here! Früher wurde die ``[parent_node].removeChild()`` Methode angewandt (auch hier wird die Referenz auf das aus DOM gelöschte Element zurückgegeben): .. code-block:: javascript let oldItem = unorderedList.querySelector("li"); let removedItem = unorderedList.removeChild(oldItem); Knoten ersetzen --------------- Über ``[parent_node].replaceChild(new, exists)`` wird ein Kind-Knoten einer Node durch einen anderen Knoten ersetzt. Der Rückgabewert ist das Element, welches ersetzt wurde. .. code-block:: javascript const unorderedList = document.querySelector("ul"); let item = document.createElement("li"); item.textContent = 5; item.className = "replace"; let firstItem = unorderedList.querySelector("li"); let oldItem = unorderedList.replaceChild(item, firstItem); Über ``replaceChildren(new)`` werden **alle** Kind-Knoten eines Eltern-Knoten durch neue Elemente oder Strings ersetzt. .. code-block:: const unorderedList = document.querySelector("ul"); let item_2 = document.createElement("li"); let item_3 = document.createElement("li"); item_2.textContent = 55; item_3.textContent = 66; unorderedList.replaceChildren(item_2, "Kleiner Text im Regen ...", item_3); Zuletzt kann über ``replaceWith()`` ein existierendes Element durch eine Vielzahl von Elementen ersetzt werden. Die Elemente werden als einzelne Argumente übergeben. .. code-block:: javascript const unorderedList = document.querySelector("ul"); let item_2 = document.createElement("li"); let item_3 = document.createElement("li"); item_2.textContent = 111; item_3.textContent = 222; let firstItem = unorderedList.querySelector("li"); firstItem.replaceWith(item_2, "Kleiner Text im Schnee...", item_3); Alle Elemente im DOM erreichen ------------------------------ Über ``[parent_node].insertBefore(item, ref)`` kann ein Knoten **vor** einem beliebigen Referenzknoten innerhalb eines Eltern-Knotens eingefügt werden .. code-block:: javascript const unorderedList = document.querySelector("ul"); let item = document.createElement("li"); item.textContent = 6; item.className = "insert"; let refNode = unorderedList.querySelector("li:nth-of-type(3)"); unorderedList.insertBefore(item, refNode); HTML Template verwenden ======================= Über ``[node].content`` lässt sich auf den Inhalt eines ``