實際上,jQuery是JavaScript DOM的一個包裝,它既增強和簡化了它。 非常簡單jQuery選擇返回jQuery對象/秒即
var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects
然而,與Java語言中選擇元素,則返回HTML DOM元素,即
var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects
的問題出現在DOM對象不提供相同的功能, JQuery對象提供。
下面是一個事件例子示出的區別:
$('.changeColorHover').hover(function() {
this.attr("style", "color:red");
}); //Will not work as we are trying to call a JQuery method on a DOM object
考慮到提到的上方的「這個」關鍵字是一個DOM對象,因此你需要將其轉換爲一個jQuery對象,以便利用jQuery方法。
$('.changeColorHover').hover(function() {
$(this).attr("style", "color:red");
}); //Will work since we have first converted the DOM object to a JQuery object
總結一下,this關鍵字允許你訪問調用事件的對象,因爲這會引發引發事件的對象。但是,這是一個DOM對象,而不是一個jQuery對象。因此,除非將其轉換爲jQuery對象,否則您想使用的任何jQuery方法都不可用。
是的,它是一個jquery idiom –
@Matt:代碼中沒有jQuery。將「this」賦值給另一個變量在「普通JavaScript」中也很常見。 –
@Felix:它是一個插件,這意味着這是指一個jQuery對象。有(或曾經是)用jquery對象加$前綴的jquery方法。因此,它是一個jQuery的問題。如果它不是$ jquery,那麼你可能會看到,那個,自己或者更具描述性的關於這個實際上是什麼的意思 –