NodeIterator#

NodeIterator.filter#

Właściwość filter zwraca filtr skojarzony z danym iteratorem 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_filter = nodeIterator.filter;

gdzie poszczególne człony oznaczają:

Filtr jest ustawiany bezpośrednio przy tworzeniu iteratora węzłowego (jako trzeci argumenty) za pomocą metody Document.createNodeIterator() 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 iteratora węzłowego z domyślnym filtrem
	var iterator1 = document.createNodeIterator(document);

	// Tworzymy nowego iteratora węzłowego z konkretnym filtrem
	var iterator2 = document.createNodeIterator(document, 1, function(){
		return 1;
	});

	// Tworzymy nowego iteratora węzłowego z konkretnym filtrem
	var iterator3 = document.createNodeIterator(document, 1, {
		acceptNode: function(){return 1;}
	});

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

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

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

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

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

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

	// Tworzymy nowego iteratora węzłowego z konkretnym filtrem
	function test(){};
	var iterator4 = document.createNodeIterator(document, 1, test);
	document.write(test == iterator4.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 NodeIterator {
	readonly attribute NodeFilter? filter;
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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