event.currentTarget在jQuery中总是等于$(this)吗?

时间:2011-12-22 12:40:17

标签: javascript jquery

这句话总是如此吗?

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

一种方法优于另一种吗?我喜欢使用$(this)而不是event.currentTarget,但在某些条件下可以做得更好吗?哪个更好?完全一样吗?

另一个细微差别 - 当检查萤火虫console.log(this)console.log($(this))给我完全相同的元素时。如果它们是相同的 - 有什么不同? (因为我知道我可以写这个$(this).css('color','white')但不能写this.css('color','white')

3 个答案:

答案 0 :(得分:13)

一般来说,是的,它会是一样的。你可以通过使用$.proxy来操纵上下文来区别对待,但在实践中你可能永远不会。

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

至于另一个问题,this是本机DOM元素,而$(this)是包装该DOM元素的jQuery对象。 jQuery包装器意味着您可以运行jQuery函数,例如css,这些函数在本机DOM元素上不可用。


而且,为了回答问题的准确措辞,event.currentTarget通常等于this,而不是$(this)

答案 1 :(得分:1)

你的部分答案在上面。我希望它足够清楚。

console.log(this)console.log($j(this))不会给您相同的结果。 $(this)将其转换为jQuery对象,因此您可以调用.css类似于可以在jQuery对象($(this))上调用的方法,而不是将调用this的HTML元素。

答案 2 :(得分:0)

此属性通常等于函数的属性。

如果您使用jQuery.proxy或其他形式的范围操作,这将等于您提供的任何上下文,而不是event.currentTarget