2011-08-24 39 views
3

給予代碼:「這」在這裏代表什麼?

$(element, document).mousedown(function() { 
     $(this).attr('id'); // get id of the element 

}); 

如何重寫代碼,而無需使用this

+6

爲什麼?它出什麼問題了? –

+0

如果問題中的$(element,document)'變爲'$(selector,context)',那麼這非常相關。你正在問一個特殊的情況下 – naveen

回答

1

您可以使用以下方法:

$(element, document).mousedown(function(e) { 
     $(e.target).attr('id'); // Get id of the element. 
}); 
1

一個版本沒有this關鍵字:

var $element = $('#element'); 
$element.mousedown(function() { 
    var id = $element.attr('id'); 
     // id is now 'element' 
}); 
+1

其實錯了:)如果#element選擇符匹配多個元素? ;) – Tigraine

+2

它不。如果有,請更正您的HTML。 – Simeon

+0

它的一個ID怎麼能匹配超過1! :/ – Baz1nga

3

這是什麼主張?

在這種情況下,this指向您當前正在爲其定義mousedown屬性的元素。

我看不到在這裏不使用它的原因。你能詳細說明你想做什麼嗎?

0

在這種情況下,「this」指的是被點擊的元素。它不是必需的,但你必須有這樣的代碼,每一個元素:

$("#button").mousedown(function(){ 
$("#button").attr("id"); 
}) 

這是很容易把它留在

+0

@cwallenpoole你爲什麼編輯我的答案? – Coomie

+0

你錯過了一個關閉'''。 – cwallenpoole

0

這在JavaScript代表函數的執行上下文。在這種情況下,您可以從jQuery設置this中受益於您綁定的元素。但是通過自寫函數,通常最終會引用全局對象。

如果你曾經輸入過一個新的函數作用域,你通常必須保留這個,因爲一個新的函數有一個新的函數。

例如

$('div').each(function(index, item) { 
    var that = this; 
    $(this).mousedown(function() { 
     //this could be something different than before 
     //so we use the that reference 
     $(that).hide(); 
    } 
}); 
0

「這個」 是指功能的範圍。關於這個功能,這是被執行的元素。在你編碼的情況下,這個動作被mousedown,所以被執行的元素就是這個。希望這個幫助。

0

問題是你不會比使用this更有效率。其他一切或多或少需要第二個元素查找,雖然不是致命的昂貴,但比在範圍內使用該對象更昂貴(this)。

嚴格地說,這是最字面解釋:

$(element, document).mousedown(function() { 
     $(element, document).attr('id'); 
}); 

現在,這可能是好的,但如果你的元素實際上是返回多個值(例如類選擇)一個選擇,你會有問題。所以,相反,你可能要考慮:

$(element, document).each(function(ind, elem) { 
    elem.mousedown(function(){ elem.attr('id'); }); 
});