2009-08-13 17 views
74

avrei il sospetto che questo funzioni in un primo momento:prova se due elementi sono gli stessi

if ($('#element') == $('#element')) alert('hello'); 

ma non è così. Come si fa a testare se gli elementi sono uguali?

risposta

101

Come di jQuery 1.6 è ora possibile fare semplicemente:

$element1.is($element2) 
+7

Questa è la migliore risposta per tutte le versioni recenti di Jquery. –

+0

Un altro che vorrei poter invocare per ogni volta che finisco su Googling la stessa domanda e trovare questa risposta – freefaller

5

Vorrei utilizzare addClass() per contrassegnare l'aperto e puoi verificarlo facilmente.

0

Come la seta o Santi ha detto, un ID o una classe univoci sarebbe il modo più semplice per testare. Il motivo per cui le tue istruzioni if ​​non funzionano come ti aspetteresti è perché confronta 2 oggetti e vede se sono lo stesso oggetto in memoria.

Poiché è sempre un nuovo oggetto creato da $ (this), non possono mai eguagliarsi l'un l'altro. Ecco perché devi testare una proprietà dell'oggetto. È possibile ottenere un ID/classe univoco se ogni elemento openActivity è stato garantito con contenuto diverso da testare.

73

Questo dovrebbe funzionare:

if ($(this)[0] === $(this)[0]) alert('hello'); 

in modo opportuno questo

if (openActivity[0] == $(this)[0]) alert('hello'); 
+3

non dovrebbe tuo secondo esempio essere = == e non ==, per rispecchiare correttamente il tuo primo esempio? – Prusprus

+3

Questa risposta potrebbe essere corretta nelle versioni precedenti di jQuery, ma molte persone probabilmente usano una versione che supporta '$ .is' –

12

Come qualcuno ha già detto, lo stesso elemento HTML avvolto in due momenti diversi genera due istanze diverse jQuery, in modo che non può mai essere pari.

Invece, gli elementi HTML avvolti può essere paragonato in questo modo, dal momento che la posizione di memoria che occupano è lo stesso se si tratta dello stesso elemento HTML, quindi:

var LIs = $('#myUL LI'); 
var $match = $('#myUL').find('LI:first'); 

alert(LIs.eq(0) === $match); // false 
alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :) 

i migliori saluti!

14

O semplicemente

if (openActivity[0] == this) alert('hello'); 

(senza una nuova istanza jQuery ;-)

Problemi correlati