2009-11-09 183 views
3

我有這個網站:jQuery的美元符號

<ul id="list1" class="eventlist"> 
    <li>plain</li> 
    <li class="special">special <button>I am special</button></li> 
    <li>plain</li> 
</ul> 

,我有這樣的jQuery代碼:

$('#list1 li.special button').click(function(event) { 

    var $newLi = $('<li class="special"><button>I am new</button></li>'); 
    var $tgt = $(event.target); 
}); 

我的問題是什麼

var $tgt = $(event.target); 

之間的區別
var $tgt = event.target; 

回答

10

event.target是對DOM節點的引用。 $(event.target)是一個包裝DOM節點的jQuery對象,它允許您使用jQuery的魔法來查詢操作DOM。

換句話說,你可以這樣做:

$(event.target).addClass('myClass'); 

,但你不能做到這一點:

event.tagert.addClass('myClass'); 
+1

它是不是也調用一個名爲'$()'的函數來返回一個jQuery對象? – hippietrail 2012-01-06 09:46:39

5

在第一種情況下,局部變量$tgt將包含jQuery元素(圍繞DOM元素),在第二種情況下,它將包含DOM元素。

您不能直接在DOM元素上使用jQuery操縱方法(如.val()),因此如果您想這樣做,您需要先將其轉換爲jQuery元素。

2

我只是用$(this)搶元素的建議。 jQuery不會在內部,所以你不必:

$('#list1 li.special button').click(function() { 
    var $tgt = $(this); 
}); 

要回答你的問題:$(event.target)與jQuery進行擴展,並event.target不會。

+0

爲了澄清,AFAIK在jQuery事件處理程序中this和event.target之間的區別在於,'this'是您爲其分配處理程序的DOM元素。 event.target是實際獲得該事件的元素。例如。如果您在包含其他代碼的div上放置點擊處理程序,處理程序將獲取事件,其中這是div標記,而event.target是實際獲得點擊的最嵌套標記。 – 2009-11-09 17:08:31

+0

不是真的......如果'click'事件綁定到文檔中的所有段落標籤,例如,處理程序內部的'this'將引用被單擊的單個元素 - 而不是所有段落處理程序被綁定。 ); $('p')。click(function(){/ *(this)will will引用特定段落被點擊* /});'' – brianreavis 2009-11-09 17:14:47