2011-11-28 146 views
2

我有一个链接问题。例如,下面的工作jQuery链接 - 为什么不能链接?

$('#myActivityFeed .bv_default_player_pic').attr("src", url); 
$('#myActivityFeed. bv_default_player_pic').removeClass().addClass('badge'); 

但以下不会:

$('#myActivityFeed .bv_default_player_pic').attr("src", url).removeClass().addClass('badge'); 

据我所知,你应该能够链条这些事件....任何想法,为什么我不能?

+0

你想删除什么课? –

+1

适合我:http://jsfiddle.net/JSbuu/ –

+1

@Ortal,这应该工作。我最好的猜测是'url'是'undefined',所以对'attr()'的调用被解释为它的getter形式,这是不可链接的。是这样吗? –

回答

2

你的例子应该工作。 Here's a live example。它通过类“bv_default_player_pic”显示我的Gravatar在其周围有一个红色边框,内部值为id,值为“myActivityFeed”。当您单击该按钮,它执行代码(不变,字面复制和粘贴):

$('#myActivityFeed .bv_default_player_pic').attr("src", url).removeClass().addClass('badge'); 

...这台src的Gravatar,删除所有类,并增加了类“徽章“(使边框变黑,用我的CSS)。

工作得很好。问题在于其他地方(是否定义了url?)。

+2

没有必要,className是可选的,在这种情况下,它删除所有的类。 [检查这里](http://api.jquery.com/removeClass/) – Arindam

+1

@Arindam:谢谢,我不知道,但当我重新阅读我的答案时,我想“......我想知道是否。 ..“,并有你的评论。固定。 –

+0

对不起,该评论不适合您的帖子。可能是一个页面刷新问题 – Arindam

-1

attr方法不返回jQuery对象。在这里检查。 attr Api

因此,你不能把任何东西放到最后。

removeClass返回一个jQuery对象。请在这里 removeClass api,对此你可以继续jQuery的

+2

当你设置属性为OP时,它确实返回了jQuery对象:http://api.jquery.com/attr/#attr2(不是我的赞成,谢谢你对我的回答的评论。 ) –

2

的应用方法,根据最新的jQuery版本,没有必要参数传递给removeClass()方法。

This example说明上面的代码应该是可链接的,即使没有任何参数传递给removeClass()也应该可以工作。

来自jQuery removeClass() docs

如果包含类名作为参数,那么只有该类将从匹配元素集中移除 。 如果参数中没有指定类名 ,则所有类都将被删除

我在代码中看到的唯一问题是变量url可能是未定义的。

0

removeClass()不带参数删除所有类,那么为什么不这样做:

$('#myActivityFeed .bv_default_player_pic').attr("src", url).attr("class", "badge"); 
+1

虽然这是真的,但它与OP在'attr'调用后发生的链接问题无关。 –