TreeWalker#

TreeWalker.filter#

Właściwość filter zwraca filtr skojarzony z danym przemierzaczem drzewa. 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 walker_filter = treeWalker.filter;

gdzie poszczególne człony oznaczają:

Filtr jest ustawiany bezpośrednio przy tworzeniu przemierzacza drzewa (jako trzeci argumenty) za pomocą metody Document.createTreeWalker() i nigdy nie ulega zmianie. Wartość zwracana przez właściwość filter bezpośrednio zależy od tego trzeciego argumentu:

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 z domyślnym filtrem
	var walker1 = document.createTreeWalker(document);

	// Tworzymy nowego przemierzacza drzew z konkretnym filtrem
	var walker2 = document.createTreeWalker(document, 1, function(){
		return 1;
	});

	// Tworzymy nowego przemierzacza drzew z konkretnym filtrem
	var walker3 = document.createTreeWalker(document, 1, {
		acceptNode: function(){return 1;}
	});

	document.write(walker1.filter); // null

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

	document.write(walker2.filter); // function (){ return 1; }, w Chrome [object NodeFilter] (błędnie)
	document.write("<br>");
	document.write(walker2.filter.SHOW_ALL); // undefinded, w Chrome 4294967295 (błędnie)
	document.write("<br>");
	document.write(walker2.filter.acceptNode); // undefinded, w Chrome function acceptNode() { [native code] } (błędnie)

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

	document.write(walker3.filter); // [object Object], w Chrome [object NodeFilter] (błędnie)
	document.write("<br>");
	document.write(walker3.filter.SHOW_ALL); // undefinded, w Chrome 4294967295 (błędnie)
	document.write("<br>");
	document.write(walker3.filter.acceptNode); // function (){return 1;}, w Chrome function acceptNode() { [native code] } (błędnie)

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

	// Tworzymy nowego przemierzacza drzew z konkretnym filtrem
	function test(){};
	var walker4 = document.createTreeWalker(document, 1, test);
	document.write(test == walker4.filter); // true, w Chrome false (błędnie)

</script>

W przykładzie widzimy, że przeglądarka Chrome błędnie zwraca wartość dla właściwości filter. W rzeczywistości otrzymujemy nowy obiekt implementujący interfejs NodeFilter, z którego można nawet odczytać konkretne stałe (te same co w interfejsie NodeFilter). Oczywiście jest to nieprawidłowe zachowanie, interfejs NodeFilter jest typu zwrotnego, dlatego należy zaimplementować go samodzielnie w klasycznym obiekcie JS, a ów obiekt powinien zostać zwrócony przez właściwość filter. Firefox, IE i Opera (Presto) działają prawidłowo.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface TreeWalker {
	readonly attribute NodeFilter? filter;
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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