2011-12-22 66 views
11

這句話總是對的嗎?

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

回答

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)

+0

:(分鐘太晚了。 – 2011-12-22 12:49:35

0

這個屬性通常等於這個功能的。

如果您正在使用jQuery.proxy或範圍操作的另一種形式,這將等於你提供的任何上下文,而不是event.currentTarget

1

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

console.log(this)console.log($j(this))不會給你同樣的結果。 $(this)將其轉換爲jQuery對象,因此您可以調用.css,就像可以在jQuery對象上調用的方法($(this)),而不是將會是this的HTML元素。