2011-12-22 13 views
11

¿Es esta frase siempre cierta?

$("p").click(function(event) { 
    alert(event.currentTarget === this); 
}); 

¿Se prefiere un método sobre el otro? Me gusta usar $(this) en lugar de event.currentTarget, pero ¿se puede mejorar en algunas condiciones? ¿Cual es mejor? ¿Son absolutamente lo mismo?

Y otro matiz: cuando reviso firebug console.log(this) y console.log($(this)) me da exactamente el mismo elemento. Si son lo mismo, ¿qué es diferente? (Ya sé que puedo escribir esta $(this).css('color','white') pero no puedo escribir this.css('color','white')

Respuesta

13

Generalmente, sí, será lo mismo. Puede hacerlo diferente usando $.proxy para manipular el contexto, pero en la práctica probablemente nunca lo haga.

$(document.body).on('click', $.proxy(function(e) { 
    console.log(this);   // window 
    console.log(e.currentTarget); // document.body 
}, window)); 

En cuanto a la otra pregunta, this es un elemento DOM nativo, mientras que $(this) es un objeto jQuery que envuelve ese elemento DOM. El envoltorio jQuery significa que puede ejecutar funciones jQuery como css, que no están disponibles en elementos DOM nativos.


Y, para responder a la redacción precisa de su pregunta, event.currentTarget es normalmente igual a this, no $(this).

+0

:(un minuto demasiado tarde. –

0

Esta propiedad típicamente será igual al este de la función.

Si está utilizando jQuery.proxy u otra forma de manipulación alcance, esto será igual al contexto que haya proporcionado, no event.currentTarget

1

Parte de su respuesta está por encima. Espero que sea lo suficientemente claro.

No console.log(this) y console.log($j(this)) no le darán el mismo resultado. $ (esto) lo convierte en un Objeto jQuery y, por lo tanto, puede invocar .css como métodos que pueden invocarse en los objetos jQuery ($ (this)) y no en los elementos HTML que serán this.