Range#

Range.intersectsNode()#

Metoda intersectsNode() zwraca boolowską wartość true jeśli przekazany węzeł krzyżuje się z danym zakresem, w przeciwnym razie zwrócona zostanie wartość false.

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 is_intersects = range.intersectsNode(node);

gdzie poszczególne człony oznaczają:

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

  1. Jeśli korzeń w node jest inny od korzenia w obiekcie kontekstu, to zwróć boolowską wartość false.
  2. Niech parent będzie rodzicem w node.
  3. Jeśli parent ma wartość null, to zwróć boolowską wartość true.
  4. Niech offset będzie indeksem w node.
  5. Jeśli (parent, offset) jest przed końcem w obiekcie kontekstu i (parent, offset + 1) jest za początkiem w obiekcie kontekstu, to zwróć boolowską wartość true.
  6. Zwróć boolowską wartość false.

W uproszczeniu można powiedzieć, że węzeł przekazany do metody intersectsNode() krzyżuje się z danym zakresem kiedy jest w nim zawarty lub częściowo zawarty, lub kiedy jest przodkiem obejmującym dla jego węzła początkowego i węzła końcowego.

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");

	// Tworzymy nowy zakres
	var range = document.createRange();

	document.write(range.intersectsNode(document.firstChild)); // false, w Chrome true (błąd)
	document.write("<br>");
	document.write(range.intersectsNode(newP)); // false
	document.write("<br>");
	document.write(range.intersectsNode(document)); // true, w Chrome zrzucany jest wyjątek (błąd)

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

	// Zmieniamy koniec zakresu na węzeł HEAD
	range.setEnd(document.firstChild.firstChild, 0);

	document.write(range.intersectsNode(document)); // true
	document.write("<br>");
	document.write(range.intersectsNode(document.firstChild)); // true
	document.write("<br>");
	document.write(range.intersectsNode(document.firstChild.firstChild)); // true
	document.write("<br>");
	document.write(range.intersectsNode(document.firstChild.lastChild.lastChild)); // false
	document.write("<br>");
	document.write(range.intersectsNode(document.firstChild.lastChild)); // false
	document.write("<br>");
	document.write(range.intersectsNode(newP)); // false

</script>

Na chwilę obecną jedynie przeglądarki Firefox i Opera (Presto) obsługują metodę intersectsNode() zgodnie z wymaganiami specyfikacji DOM4. W Chrome zwracane są nieprawidłowe wartości i w niektórych sytuacjach niepotrzebnie zrzucane są błędy, co widać w powyższym przykładzie, natomiast IE11 kompletnie nie wspiera tej metody.

Metoda intersectsNode() pojawia się dopiero w specyfikacji DOM4.

Składnia Web IDL#

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

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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