Document#

Document.adoptNode()#

Metoda adoptNode() adoptuje (na zasadzie przenoszenia) przekazany węzeł z innego dokumentu do danego dokumentu i zwraca referencję do adoptowanego 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 adopted = document.adoptNode(node);

gdzie poszczególne człony oznaczają:

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

  1. Jeśli node jest węzłem typu Document, to zrzuć wyjątek "NotSupportedError".
  2. Jeśli node jest węzłem typu ShadowRoot, to zrzuć wyjątek "HierarchyRequestError".
  3. Adoptuj node do obiektu kontekstu.
  4. Zwróć node.

Adoptowany węzeł zwracany przez metodę adoptNode() zostaje usunięty (wraz z całą swoją zawartością) z poprzedniego drzewa węzłów, ale nie jest częścią w nowym drzewie dokumentu dopóki nie zostanie dodany do innego węzła należącego do drzewa dokumentu. Dlatego adoptowany węzeł nie będzie posiadał rodzica (wartość null), aczkolwiek dalej posiada jakiegoś właściciela (tylko, że zmienionego).

Prosty przykład:

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

	var newP = document.createElement("p");
	newP.textContent = "Węzeł tekstowy w akapicie.";

	var newDocXML = document.implementation.createDocument(null, null, null);

	document.write("Akapit z jednym węzłem tekstowym przed adopcją: " + "<br>");
	document.write("newP.childNodes.length: " + newP.childNodes.length + "<br>");
	document.write("newP.childNodes[0]: " + newP.childNodes[0] + "<br>");
	document.write("newP.childNodes[0].textContent: " + newP.childNodes[0].textContent + "<br>");
	document.write("newP.childNodes[0].ownerDocument: " + newP.childNodes[0].ownerDocument + "<br><br>");

	document.write("Nowy dokument XML (będzie adoptował węzeł tekstowy z akapitu): " + "<br>");
	document.write("var newDocXML = createDocument(null, null, null);" + "<br>");
	document.write("newDocXML: " + newDocXML + "<br>");
	document.write("newDocXML.childNodes.length: " + newDocXML.childNodes.length + "<br>");
	var compare = newDocXML == document;
	document.write("newDocXML == document: " + compare + "<br><br>");

	document.write("Adopcja węzeł tekstowego z akapitu:" + "<br>");
	document.write("var adopted = newDocXML.adoptNode(newP.firstChild);" + "<br>");
	var adopted = newDocXML.adoptNode(newP.firstChild);
	document.write("newDocXML.childNodes.length: " + newDocXML.childNodes.length + "<br><br>");

	document.write("Węzeł tekstowy po adopcji:" + "<br>");
	document.write("adopted: " + adopted + "<br>");
	document.write("adopted.textContent: " + adopted.textContent + "<br>");
	document.write("adopted.ownerDocument: " + adopted.ownerDocument + "<br><br>");

	document.write("Akapit po adopcji: " + "<br>");
	document.write("newP.childNodes.length: " + newP.childNodes.length);

	document.write("<br><br>");

	try{
		document.adoptNode(document); // adoptujemy węzeł będący dokumentem
	}
	catch(e){
		document.write("Przekazanie do metody adoptNode() węzła będącego dokumentem zrzuca błąd:" + "<br>");
		document.write(e); // opis zależny od przeglądarki
		document.write("<br>");
		document.write(e.constructor); // function DOMException() { [native code] }
	}

	document.write("<br><br>");

	try{
		document.adoptNode(newP.createShadowRoot()); // adoptujemy węzeł typu ShadowRoot
	}
	catch(e){
		document.write("Przekazanie do metody adoptNode() węzła typu ShadowRoot zrzuca błąd:" + "<br>");
		document.write(e); // opis zależny od przeglądarki
		document.write("<br>");
		document.write(e.constructor); // function DOMException() { [native code] }
	}

</script>

Składnia Web IDL#

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

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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