2009-11-09 179 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