2012-01-03 196 views
9

我經常看到在jquery中使用關鍵字this的示例。有時候我會發現它和$和括號一起使用,有些時候沒有。而且我認爲我看到它每個都使用了一點。

所以,

var id = this.attr('id'); 

var id = $(this).attr('id'); 

var id = $this.attr('id'); 

難道這些都是一樣的?有沒有一種首選方式?是一個JavaScript事情this$(this)一個jQuery的東西?如果是這樣,$this在哪裏下降?

我知道這可能是一個總的新手問題,但我一直無法得到簡單的,this,本身,工作。我只能得到$(this)才能工作。我不確定我是否做錯了什麼,或者我是否正在閱讀錯別字的例子。

+1

'this'是一個js自引用,並且把$()用jquery類包裝起來。是什麼引用$ this--它只是一個變量名(不是預定義的),通常用在jquery插件中,以便始終引用子類中的第一級父類 – 2012-01-03 22:49:29

回答

10

this是一個JavaScript的東西。它指的是函數運行的「上下文」。對於大多數事件處理程序來說,它是正在監聽事件的(「原始」)DOM元素。在其他情況下,這將意味着其他事情;使用Google搜索「this」可能會有所啓發。


我說,這是「原始」的DOM元素,因爲jQuery是經常被用來包裹平原DOM元素在一個jQuery包裝,所以你可以使用jQuery方法如attr而不是通常的那些(getAttributesetAttribute等)。這個包裝是用$函數完成的,這就是你看到$(this)的地方。例如:

this.getAttribute("href") 
/* or */ someElement.getAttribute("href") 

相同

$(this).attr("href") 
/* or */ $(someElement).attr("href") 

$thisthis$僅僅是一個變量名。但是,它不喜歡

var $this = $(this); 

的分配往往是傳統這樣做的原因是爲了避免不斷地調用$功能,這是比較昂貴的,因爲它創建了一個新的jQuery包裝對象每次。如果將包裹的元素存儲在變量中,則效率稍微有所提高。


在極少數情況下,this可能已經是jQuery包裝器。我經常遇到的情況是編寫jQuery插件時。在這種情況下,你可以直接做this.attr("id")之類的事情,而不是先把它包起來,因爲它已經被包裝好了。在通常情況下(事件處理程序,$.each等)包裝是必要的。

+0

+1很好的答案。很徹底。 – ThinkingStiff 2012-01-03 23:04:28

+0

是的,很好的答案。最後一部分有助於解釋我在某處讀過的東西,但可以再次找到它。我看到使用了'this.attr(「id」)',但它對我沒有用。我認爲這是最讓我困惑的。 – 2012-01-04 15:08:12

5

this是引用當前對象的本機JavaScript對象。在用jQuery.fn.定義的jQuery函數中,this本身就是一個jQuery對象。 $(this)是jQuery將Javascript this轉換爲jQuery對象的方式。而$this只是一個變量名。如果你還沒有定義它,那將是undefined

這裏是this jQuery的使用的一個很好的解釋:

http://www.learningjquery.com/2007/08/what-is-this

+1

'this'不僅用於事件處理程序,它是對當前對象的引用。這裏有一個進一步的解釋:http://justin.harmonize.fm/index.php/2009/09/an-introduction-to-javascripts-this/ – voithos 2012-01-03 22:49:21

+0

@voithos謝謝。更新。 – ThinkingStiff 2012-01-03 22:51:22

8

「這」是指當前對象的Javascript對象的關鍵字,「$(本)」是jQuery的包裝功能將當前對象轉換爲jQuery對象,並且當您看到'$ this'時,它通常指的是開發人員創建的用於引用$(this)對象的變量,它在$ .each循環中很有用。例如:

$(function(){ 
    $('a').click(function(){ 
    var $this = $(this); // refers to the $('a') object 
    $('div').each(function(){ 
     $(this).hide(); // $(this) refers to each 'div' in the loop, not the $('a') 
     $this.css({ color: 'blue' }); // turns the link element text blue 
    }); 
    }); 
}); 
+0

您能解釋一下您的答案,以顯示何時以及爲什麼簡單'this'可以發揮作用 – veeTrain 2012-05-08 14:33:42

+0

在這種情況下使用簡單'this'的唯一原因是如果您需要訪問原始DOM節點上的方法或變量,例如如下所示:http://www.w3schools.com/jsref/dom_obj_node.asp 例如,你不能在普通的'this'上使用jQuery方法,例如:this.hide(); – afrederick 2012-05-09 15:27:06

+0

哦,我明白了。那麼可以肯定地說,你對'this'執行的任何'操作'都有可能不符合跨瀏覽器的要求。儘管將它包裝在'$()'中並使用jQuery方法會更安全嗎?因爲OP想知道關於'this'的這些含義,所以更新你的答案可能是個好方法 – veeTrain 2012-05-09 17:03:21

1

而不是多次調用$(this),將其作爲變量存儲更爲高效,通常稱爲$this,以便人們知道它是什麼。