Node#

Node.appendChild()#

Metoda appendChild() dodaje przekazany węzeł za ostatnim dzieckiem w danym węźle i zwraca referencję do przekazanego węzła.

Opis działania#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var other = node.appendChild(other);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody appendChild(other) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Zwróć wynik dodawania other do obiektu kontekstu.

Warto podkreślić, że węzeł docelowy, na którym wywołujemy metodę appendChild(), nie musi być rodzicem ani nawet przodkiem dla przekazanego węzła (choć może), w przeciwieństwie do innych metod modyfikujących zawartość węzłów, np. Node.insertBefore(), Node.removeChild() czy Node.replaceChild(), dla których taki wymóg istnieje.

Analizując dokładnie wszystkie powiązane z metodą appendChild() algorytmy można zauważyć, że przekazany węzeł nie może istnieć jednocześnie w kilku miejscach drzewa węzłów. Najpierw zostanie usunięty z drzewa węzłów, a następnie wstawiony w nowe miejsce drzewa węzłów (z ewentualnym skorygowaniem jego właściciela). Jeśli zależy nam na wstawieniu drugiego identycznego węzła należy go najpierw sklonować i dopiero dołączyć do konkretnego drzewa węzłów. Trzeba pamiętać, że kopia nigdy nie będzie zsynchronizowana z oryginałem (są to dwa osobne obiekty), każda zmiana oryginału nie będzie miała żadnego wpływu na wykonaną kopię.

Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		// Uruchom po całkowitym załadowaniu dokumentu
		window.onload = function(){

			var ul1 = document.getElementById("ul1");
			var ul2 = document.getElementById("ul2");
			var newChild = ul1.getElementsByTagName("li")[1]; // referencja do nowego dziecka

			// Manipulujemy drzewem po upływie 3 s
			setTimeout(function(){

				var ref = ul2.appendChild(newChild); // referencja do nowego dziecka po jego dodaniu, to samo co newChild

				var nextChild = document.createElement("li"); // kolejne nowe dziecko
				nextChild.textContent = ref; // wartością tekstową uzyskaną po automatycznej konwersji ref będzie [object HTMLLIElement]

				ul2.appendChild(nextChild);

			}, 3000);

		}

	</script>

</head>

<body>
	<p>Lista 1</p>
	<ul id="ul1">
		<li><a href="">Pierwszy odsyłacz</a></li>
		<li><a href="">Drugi odsyłacz</a></li>
	</ul>

	<p>Lista 2</p>
	<ul id="ul2">
		<li><a href="">Pierwszy odsyłacz</a></li>
	</ul>
</body>

</html>

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Node : EventTarget {
	Node appendChild(Node other);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Node (H1) Node.appendChild() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)