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


这句话总是如此吗?

$("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') 


4455
2017-12-22 12:40


起源



答案:


一般来说,是的,它会是一样的。你可以通过使用它来使它不同 $.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)


13
2017-12-22 12:47



:(一分钟太晚了。 - Alok Swain


答案:


一般来说,是的,它会是一样的。你可以通过使用它来使它不同 $.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)


13
2017-12-22 12:47



:(一分钟太晚了。 - Alok Swain


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

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


1
2017-12-22 12:48





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

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


0
2017-12-22 12:42