2010-09-06 19 views
44

Nie ma problemu, aby znaleźć element po pozycji i pozycji elementu w JavaScript. Ale czy istnieje ogólny sposób ich porównania?Czy istnieje sposób sprawdzenia, czy dwa elementy DOM są równe?

Jedyny sposób, jaki mogłem wymyślić, to porównywanie identyfikatorów i nazw klas, ale nie wszystkie elementy mają identyfikatory i nazwy klas.

+1

Co oznacza "równy" w twoim kontekście, a jeśli nie ten sam identyfikator? Czy to ten sam typ elementu? Czy ta sama treść? Proszę nieco rozszerzyć swoje pytanie ... – peirix

+1

Porównaj, co z nimi? Wysokość, kolor tła, indeks Z? Co chcesz porównać? – Robert

+0

Co masz na myśli "równy"? Masz na myśli, gdy dwie zmienne wskazują na ten sam element? Czy masz na myśli, że te dwa elementy "wyglądają tak samo". Jeśli tak, to musisz zdefiniować, co to znaczy "wyglądać tak samo": czy ta sama liczba pozycji w kodzie XY, czy ta sama liczba przezroczystości/krycia, ta sama treść tekstu? – slebetman

Odpowiedz

38

Jeśli chcesz porównać dwa wskaźniki elementów dla tego samego elementu, po prostu użyj operatora porównania. To może być łatwo sprawdzone, ponieważ

document.body === document.body 

Na przykład, jeśli w jakiś sposób miał odniesienia do dwóch elementów nie wiedziałem:

if (element1 === element2) ... 
+0

Dzięki za sugestię! –

+0

@ www139 - dlaczego to jest zalecane? proszę dostarczyć dowód: – vsync

+0

@vsync spójrz na to pytanie http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons i http: //stackoverflow.com/questions/10679762/how-to-compare-two-html-elements – www139

30

W nowoczesnych przeglądarek istnieją dwie metody porównywania węzłów.

var a = document.createElement('div'); 
var b = document.createElement('div'); 
b.isEqualNode(a); // true 

ale

b.isSameNode(a); //false 

A co do IE, to elementy DOM mają zakaz stanard atrybut uniqueID. Ale nie mogę sobie wyobrazić, że może to być przydatne w tym przypadku, ponieważ tak, w rzeczywistości można porównać dwa wskaźniki.

+12

Doradztwo MDN jest amortyzowane i należy użyć == lub === jak w odpowiedzi Delana. https://developer.mozilla.org/en-US/docs/DOM/Node.isSameNode – Andru

+0

@Andru, oh, wszystko zmienia się dość szybko w ostatnich latach :))) – shabunc

+2

Funkcja 'isSameNode' jest przestarzała, powinieneś użyć' isEqualNode' zamiast tego. Zobacz https://developer.mozilla.org/en-US/docs/Web/API/Node.isSameNode – idFlood

Powiązane problemy