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:
var same = node.isSameNode(other);gdzie poszczególne człony oznaczają:
- equal - boolowskie
truelubfalse. - node - węzeł będący obiektem kontekstu.
- other - referencja do węzła sprawdzanego pod kątem równoważności z danym węzłem lub wartość
null.
Algorytm wywołania metody isSameNode(other) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć boolowską wartość
truejeś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:
<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#
interface Node : EventTarget { boolean isEqualNode(Node? other); // historical alias of === }