2011-12-22 24 views
31

Lo que quiero hacer:'e.target' a un objeto jQuery

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

Lo que intenté

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

Mi solución

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

¿Cuál es la manera correcta para comparar el objeto que hice clic en un objeto en el DOM?

Respuesta

32

Para verificar si e.target tiene esta clase, puede usar la función hasClass.

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

O, si realmente quiere comparar objetos, tenga en cuenta que los selectores de jQuery devuelven una colección de artículos, por lo que cree que va

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

me gusta esta respuesta, ya que describe por qué mi enfoque no funciona. jQuery devuelve una colección de elementos. – dubbelj

+0

@dubbelj - genial - me alegro de que ayudó :) –

29

Estás cerca. .is() utilizar en su lugar:

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

El truco aquí es que usted envuelve e.target en un objeto jQuery para permitir el acceso a todos los métodos útiles jQuery.

Si acaba de ver si e.target tiene una cierta clase, trate de usar .hasClass() en lugar de .is():

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

Cualquiera de los métodos funciona, aunque .hasClass() es un poco más claro en cuanto a lo que hace el código, y es más rápido que usar .is()

+0

+1 estaba escribiendo lo mismo. –

+2

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

+2

@ 32bitkid Me disculpo ;-) ¡Eso me ha sucedido tantas veces! – Bojangles

0

Si desea hacer coincidir el elemento que el evento se une a usted puede utilizar $(this), o si usted quiere encontrar qué elemento activado el evento utilizar $(event.target).

A continuación se muestra un ejemplo de ambos.

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

A menos que utilice delegación de eventos éstos serán los mismos sin embargo y si existe el mismo elemento.

0

Obviamente, usar la función .is() es la mejor solución aquí.

Si usted se encuentra haciendo esta comparación, tratar de comprobar si es posible utilizar mecanismos de jQuery incrustados como esto:

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

segundo argumento en el método .on() es un selector de destino. Al usar esta construcción (más información: http://api.jquery.com/on/#direct-and-delegated-events) no será necesario hacer ninguna comparación adicional.