Node#

Node.isSameNode()#

Metoda isSameNode() zwraca boolowską wartość true jeśli przekazany węzeł jest równoważny z danym węzłem (czyli samym sobą), w przeciwnym razie zwrócona zostanie wartość false. Jest ona historycznym aliasem dla jednego z operatorów porównania == lub === i z zasady nie należy jej używać w aktualnym kodzie produkcyjnym.

Równoważności nie należy mylić ze zgodnością między węzłami (obiektami JS). Równoważność występuje tylko wtedy, kiedy mamy do czynienia z tym samym obiektem, lub kiedy zmienne referencyjne wskazują na ten sam obiekt w pamięci. Jeśli występuje równoważność to automatycznie spełniona jest także zgodność, chociaż sytuacja odwrotna nie musi być zachowana.

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 same = node.isSameNode(other);

gdzie poszczególne człony oznaczają:

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

  1. Zwróć boolowską wartość true jeśli other jest obiektem kontekstu, w przeciwnym razie zwróć boolowską wartość false.

Jeśli chcielibyśmy w wyrażeniu warunkowym sprawdzić, czy dany węzeł jest zgodny z przekazanym węzłem, to wystarczy skorzystać z dedykowanej metody Node.isEqualNode(), która operuje na kryteriach zgodności właściwych dla każdego rodzaju węzła.

Prosty przykład:

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

	document.write(document.isSameNode(document)); // true - węzeł równoważny z samym sobą
	document.write("<br>");
	document.write(document == document); // true - węzeł równoważny z samym sobą
	document.write("<br>");
	document.write(document === document); // true - węzeł równoważny z samym sobą

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

	var node1 = document.createElement("p");
	var node2 = document.createElement("p");

	document.write(node1.isEqualNode(node2)); // true - węzły zgodne
	document.write("<br>");
	document.write(node1 == node2); // false - węzły zgodne, ale nierównoważne

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

	document.write(node1.isEqualNode(null)); // false - brak zgodności i równoważności

</script>

Metodę isSameNode() przez długi czas uznawano za zbędną i pomijano w aktualnej specyfikacji DOM4. Prócz Firefoksa (od wersji 10) żadna inna przeglądarka internetowa nie wdrożyła stosownych korekt i w ostateczności metoda isSameNode() ponownie trafiła do specyfikacji DOM4 (DOM - Bug 27424, Mozilla - Bug 1256299, Mozilla - Bug 723645, Mozilla - Bug 687400).

Na chwilę obecną wszystkie aktualne przeglądarki obsługują metodę isSameNode() zgodnie z wymaganiami specyfikacji DOM4, z wyjątkiem IE11, która działa według starszego podejścia i nie pozwala przekazywać do metody wartości null.

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Node : EventTarget {
	boolean isEqualNode(Node? other); // historical alias of ===
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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