Node#
Node.isEqualNode()#
Metoda isEqualNode()
zwraca boolowską wartość true
jeśli przekazany węzeł jest zgodny z danym węzłem, w przeciwnym razie zwrócona zostanie wartość false
.
Zgodności nie należy mylić z równoważnoś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 equal = node.isEqualNode(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 zgodności z danym węzłem lub wartość
null
.
Algorytm wywołania metody isEqualNode(other)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć boolowską wartość
true
jeśli other nie jest wartościąnull
i obiekt kontekstu spełnia warunki zgodności z other, w przeciwnym razie zwróć boolowską wartośćfalse
.
Analizując dokładnie wszystkie powiązane z metodą isEqualNode()
algorytmy można zauważyć, że zgodność między dwoma węzłami jest ściśle uzależniona od ich rodzaju, ponieważ dla każdego z nich przewidziano osobne kryteria zgodności.
Jeśli chcielibyśmy w wyrażeniu warunkowym sprawdzić, czy dany węzeł jest równoważny z wartością sprawdzaną (czyli samym sobą), to wystarczy użyć jeden z operatorów porównania: ==
lub ===
. Co prawda istnieje dedykowana metoda Node.isSameNode()
, ale bezpośrednie skorzystanie z operatorów JS-a jest szybsze i wygodniejsze.
Prosty przykład:
<script>
document.write(document.isEqualNode(document)); // true - węzeł zgodny i równoważny z samym sobą
document.write("<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>");
node2.id = "akapit2"; // ustawiamy atrybut ID
document.write(node1.isEqualNode(node2)); // false - brak zgodności i równoważności
document.write("<br>");
document.write(node1.isEqualNode(null)); // false - brak zgodności i równoważności
document.write("<br><br>");
document.write(document.isSameNode);
</script>
Na chwilę obecną wszystkie aktualne przeglądarki obsługują metodę isEqualNode()
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); }