为什么$(this)指的是包装集而不是单个元素?

时间:2012-03-09 16:18:18

标签: jquery

在此功能中,

template.find('.userPhoto img').error(function () { 
    $(this)[0].src = '/images/default.png'; 
}).attr('src', image);

我期待 $(this)来引用一个单独的元素,但事实并非如此;相反,它指的是一个包裹的集合......你能发现原因吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

  

为什么$(this)指的是包装集而不是单个元素?

因为有人不知道更好。

在此上下文中,如果您想要原始DOM元素,只需使用this

另一方面,如果您希望在该元素上调用jQuery方法,请使用$(this)

由于你所做的只是设置DOM元素的属性,你应该使用前者:

template.find('.userPhoto img').error(function () { 
    this.src = '/images/default.png'; 
}).attr('src', image);

答案 1 :(得分:0)

我认为这是因为您可以将方法应用于选择并拥有统一的api

$("a").each(function(){
  $(this).each(...).click(...);
});
$("a").click(...);

答案 2 :(得分:0)

这就是jQuery的工作方式,这是预期的行为。

$()将DOM元素转换为jQuery对象(假装是一个数组),这是一组DOM元素。

在你的回答中,你不需要使用$()

因为,this是您想要的元素,您可以这样做:

template.find('.userPhoto img').error(function () { 
    this.src = '/images/default.png'; 
}).attr('src', image);

或者你可以这样做:

template.find('.userPhoto img').error(function () { 
    $(this).attr('src', '/images/default.png';);
}).attr('src', image);

$(this).attr('src'将更改集合中所有元素的属性(在您的情况下为一个)。