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
true
lubfalse
. - 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ść
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:
<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 === }