在此功能中,
template.find('.userPhoto img').error(function () {
$(this)[0].src = '/images/default.png';
}).attr('src', image);
我期待 $(this)来引用一个单独的元素,但事实并非如此;相反,它指的是一个包裹的集合......你能发现原因吗?
谢谢!
答案 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'
将更改集合中所有元素的属性(在您的情况下为一个)。