Document#

Document.createTreeWalker()#

Metoda createTreeWalker() tworzy nowy obiekt typu TreeWalker (tzw. przemierzacz drzewa) z określonym korzeniem, maską bitową i filtrem dla danego dokumentu.

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 new_walker = document.createCreateTreeWalker(root [, whatToShow = 4294967295 [, filter = null]]);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody createTreeWalker(root, whatToShow, filter) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Niech walker będzie nowym obiektem typu TreeWalker.
  2. Ustaw korzeń oraz zainicjuj atrybut currentNode w walker na wartość argumentu root.
  3. Ustaw maskę bitów w walker na wartość argumentu whatToShow.
  4. Ustaw filtr w walker na wartość argumentu filter.
  5. Zwróć walker.

Korzeń, maska bitowa oraz filtr w przemierzaczach drzewa są ustawiane jednorazowo za pośrednictwem metody createCreateTreeWalker() i nigdy nie ulegają zmianie. W razie potrzeby zawsze istnieje możliwość utworzenia nowego przemierzacza drzewa o określonych cechach.

Obiekt zwracany przez metodę createTreeWalker() implementuje interfejs TreeWalker, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).

Więcej szczegółów związanych z przemierzaczami drzewa umieściłem w zbiorczym dziale "Podstawy - Przejścia".

Prosty przykład:

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

	// Tworzymy nowego przemierzacza drzewa (maska bitowa oraz filtr są domyślne)
	var walker1 = document.createTreeWalker(document);

	document.write(walker1); // [object TreeWalker]
	document.write("<br>");
	document.write(walker1.root); // [object HTMLDocument]
	document.write("<br>");
	document.write(walker1.whatToShow); // 4294967295
	document.write("<br>");
	document.write(walker1.filter); // null

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

	// Tworzymy nowego przemierzacza drzewa z własną maską bitową i filtrem
	var walker2 = document.createTreeWalker(document.documentElement, 1, function(node){

		if (node.nodeName.toLowerCase() == "p"){
			return 1;
		}

	});

	document.write(walker2); // [object TreeWalker]
	document.write("<br>");
	document.write(walker2.root); // [object HTMLHtmlElement]
	document.write("<br>");
	document.write(walker2.whatToShow); // 1
	document.write("<br>");
	document.write(walker2.filter); // function (node){ if (node.nodeName.toLowerCase() == "p"){ return 1; } },
									// [object NodeFilter] w Chrome (błędnie)

</script>

Na chwilę obecną jedynie przeglądarka Firefox obsługuje metodę createTreeWalker() zgodnie z najnowszymi wymaganiami specyfikacji DOM4. Chrome błędnie zwraca funkcję filtrującą poprzez właściwość TreeWalker.filter. Opera (Presto) i IE11 spełniają wymagania poprzedniej specyfikacji, gdzie wywołanie metody createTreeWalker() wymagało przekazania czterech argumentów (żaden nie był opcjonalny).

W poprzedniej specyfikacji metoda createTreeWalker() definiowana była w specjalnym interfejsie DocumentTraversal, ale z dopiskiem, że może być implementowana bezpośrednio w interfejsie Document.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Document : Node {
	[NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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