我想做这件事很简单。
我必须将当前类添加到第一个<li>
元素,将禁用类添加到其他元素。
目前我这样做:
$('#slideshow li:first').addClass('current');
$('#slideshow li').not(':first').addClass('disabled');
但是我想知道我们是否可以在一行中做这样的事情:
$('#slideshow li').not(':first', function(){ $(this).addClass('current'); }).addClass('disabled');
任何启示都会受到高度赞赏。 :)
答案 0 :(得分:3)
jQuery链接有效,因为调用的方法返回的是运行它的相同或修改的结果集。因此,通过使用not()
进行过滤,您将返回修改后的结果集,并且无法再次访问原始结果集。
您可以使用.end()
解决此问题,其中执行以下操作:
End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
所以你要么做一些像你一样的事情(但是要缓存结果集),我发现它有点混乱,而且更具可读性:
var elements = $('#slideshow li');
elements.first().addClass('current');
elements.not(':first').addClass('disabled');
或者你使用end()
在一行中完成,这可能会变成一长串代码:
$('#slideshow li').first().addClass('current').end().not(':first').addClass('disabled');
答案 1 :(得分:2)
我最好能在清晨做到......
$('#slideshow li').first().addClass('current').end().not(':first').addClass('disabled');
答案 2 :(得分:2)
$('#slideshow li').addClass(function(i) { return !i ? "current" : "disabled"; });
i
是0索引的,是您选择元素的位置的索引。
所以如果i == 0
与第一个元素相同
i == 0 == false == !true
。
所以:
!i == !0 == !false == true
。
然后我们可以回复:
return !i ? "current" : "disabled"
。
意思是:
if ( !i ) {
return "current";
}
else {
return "disabled";
}
答案 3 :(得分:0)
我的建议是:不要用一行来做。将其拆分为两行并缓存选择器的结果:
var items = $('#slideshow li');
items.first().addClass('current');
items.not(':first').addClass('disabled')
答案 4 :(得分:0)
您可以使用siblings()
方法:
$("#slideshow li:first").addClass("current").siblings().addClass("disabled");
为什么我没想到这个????