NodeIterator#

NodeIterator.referenceNode#

Właściwość referenceNode zwraca węzeł referencyjny w danym iteratorze węzłowym. Właściwość jest tylko do odczytu.

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 iterator_ref = nodeIterator.referenceNode;

gdzie poszczególne człony oznaczają:

Węzeł referencyjny jest ostatnim węzłem, na którym został zakotwiczony iterator węzłowy. W przypadku tworzenia iteratora domyślnie staje się nim korzeń przekazany do metody Document.createNodeIterator(). Przy przechodzeniu do kolejnych węzłów za pomocą metod NodeIterator.nextNode() i NodeIterator.previousNode() węzeł referencyjny może ulec zmianie (przeważnie wartością będzie ten sam węzeł, który zostaje zwrócony przez te metody, ale nie zawsze tak będzie).

Nie należy zapominać także o sytuacji, w której będziemy usuwali węzeł w drzewie węzłów na którym iterator operuje, tutaj także może nastąpić zmiana węzła referencyjnego. W razie jakiś niejasności należy samodzielnie przeanalizować kroki przed-usuwania zdefiniowane wyłącznie dla interfejsu NodeIterator.

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>

		function iterate(direct){

			var info1 = document.getElementById("info1");
			var info2 = document.getElementById("info2");
			var root = document.getElementById("box");
			var dir = "";
			var node = "";
			var nodeText = "";

			if (typeof iterator != "object"){

				iterator = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, null);

			}

			if (info1.textContent == ""){

				info1.innerHTML = "pointerBeforeReferenceNode: " + iterator.pointerBeforeReferenceNode
					+ "<br><br>" + "root: " + iterator.root
					+ "<br>" + "referenceNode: " + iterator.referenceNode
					+ "<br>" + "referenceNode.textContent: " + iterator.referenceNode.textContent;

			}

			if (direct == "next"){
				node = iterator.nextNode();
				dir = "nextNode()";
			}

			if (direct == "previous"){
				node = iterator.previousNode();
				dir = "previousNode()";
			}

			if (node){
				nodeText = node.textContent;
			}

			var result = "pointerBeforeReferenceNode: " + iterator.pointerBeforeReferenceNode
				+ "<br><br>" + "referenceNode: " + iterator.referenceNode
				+ "<br>" + "referenceNode.textContent: " + iterator.referenceNode.textContent
				+ "<br><br>" + dir + ": " + node
				+ "<br>" + dir + ".textContent: " + nodeText;

			info2.innerHTML = result;

		}

	</script>

</head>

<body>

	<div id="box">
		<p>Pierwszy akapit w kontenerze DIV.</p>
		<P>Drugi akapit w kontenerze DIV.</p>
		<P>Trzeci akapit w kontenerze DIV.</P>
	</div>

	<p>Kliknij konkretny przycisk by iterować przez kolejne węzły w kontenerze DIV.</p>
	<input type="button" value="nextNode()" onclick="iterate('next')">
	<input type="button" value="previousNode()" onclick="iterate('previous')">

	<p style="color: blue;">Szczegółowe informacje dla utworzonego iteratora:</p>
	<p id="info1"></p>

	<p style="color: blue;">Szczegółowe informacje dla kolejnych przejść iteratora:</p>
	<p id="info2"></p>

</body>

</html>

Na chwilę obecną jedynie przeglądarki Firefox i Chrome (oraz te oparte na WebKicie) obsługują właściwość referenceNode.

Właściwość referenceNode pojawia się dopiero w specyfikacji DOM4 (wyjaśnienie).

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface NodeIterator {
	readonly attribute Node referenceNode;
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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