2011-12-22 12 views
31

Quello che voglio fare:Confronto 'e.target' a un oggetto jQuery

(clickedObject === someDiv) //returns true or false 

Quello che ho cercato

($(e.target) === $('.selector')); //returns a false negative. 

mia soluzione

($(e.target).attr('class') === $('.selector').attr('class')); //works as intended, not so clean though. 

Qual è il modo giusto per confrontare l'oggetto che ho fatto clic su un oggetto nel DOM?

risposta

32

Per verificare se e.target ha questa classe è possibile utilizzare la funzione hasClass.

if ($(e.target).hasClass("selector")) 

Oppure, se si vuole veramente per confrontare gli oggetti, si noti che i selettori jQuery restituiscono una collezione di oggetti, quindi penso che si vorrà

if (e.target === $('.selector')[0]) 
+0

mi piace questa risposta, perché descrive il motivo per cui il mio approccio non ha funzionato. jQuery restituisce una raccolta di elementi. – dubbelj

+0

@dubbelj - cool - contento che abbia aiutato :) –

29

Stai vicino. Utilizzare .is() invece:

if($(e.target).is('.selector')) { 
    // Your code 
} 

Il trucco è che si avvolge e.target in un oggetto jQuery per consentire l'accesso a tutti i metodi di jQuery utili.

Se siete solo vedere se e.target ha una certa classe, provare a utilizzare .hasClass() al posto di .is():

if($(e.target).hasClass('selector')) { 
    // Your code 
} 

metodo In entrambi i lavori, anche se .hasClass() è un po 'più chiaro su ciò che fa il codice, e è più veloce rispetto all'utilizzo .is()

+0

+1 stava semplicemente digitando la stessa cosa. –

+2

+1 - boom - badge 'nice answer' :) –

+2

@ 32bitkid Mi scuso ;-) Mi è capitato così tante volte! – Bojangles

0

Se si desidera far corrispondere l'elemento che l'evento è collegato a è possibile utilizzare $(this), o se si vuole trovare quale elemento attivato utilizzare l'evento $(event.target).

Di seguito è riportato un esempio di entrambi.

http://jsfiddle.net/Phunky/TbJef/

A meno che non si sta utilizzando la delega caso questi saranno gli stessi anche se e se c'è lo stesso elemento.

0

Ovviamente l'utilizzo della funzione .is() è la soluzione migliore qui.

Se vi trovate a fare tale confronto, prova a controllare se è possibile utilizzare i meccanismi di jQuery incorporate in questo modo:

$(element).on("click", ".selector", function() { 
    alert("clicked"); 
}); 

Secondo argomento nel metodo .on() è un selettore di destinazione. Quando si utilizza questa costruzione (ulteriori informazioni: http://api.jquery.com/on/#direct-and-delegated-events) non sarà necessario effettuare confronti aggiuntivi.

Problemi correlati