如何使此JavaScript代码更高效?

如何使此JavaScript代码更高效?,javascript,jquery,Javascript,Jquery,我目前正在为每一个有特定类的第四个div添加一个类。但是,是否有一个简单的方法来计算它们并自动将其添加到每四个div中?因为目前我是这样做的: $(".item:eq(0)").addClass('first'); $(".item:eq(4)").addClass('first'); $(".item:eq(8)").addClass('first'); $(".item:eq(12)").addClass('first'); $(".item:eq(16)").addClass('first

我目前正在为每一个有特定类的第四个div添加一个类。但是,是否有一个简单的方法来计算它们并自动将其添加到每四个div中?因为目前我是这样做的:

$(".item:eq(0)").addClass('first');
$(".item:eq(4)").addClass('first');
$(".item:eq(8)").addClass('first');
$(".item:eq(12)").addClass('first');
$(".item:eq(16)").addClass('first');
这意味着如果有100个这样的div,我就需要有这么多这样的行。谢谢。

CSS对这种情况有一个确切的解释:

$(".item:nth-child(4n+1)").addClass('first');
如果它们都是兄弟元素,但散布了其他元素,则可以使用


如果它们不是同级,则没有选择器可以帮助您。

如果元素都有一个父元素,而父元素没有其他子元素,则可以使用第n个子元素。如果不是这样的话,情况会复杂一点。类似的方法可能会奏效:

$('.item').filter(function(idx) {
    return idx % 4 === 0;
}).addClass('first');
一个稍快的解决方案,虽然稍不直观,但直接使用
addClass

$('.item').addClass(function(idx) {
    return idx % 4 === 0 ? 'first' : '';
});

我喜欢沙拉。但是,您也可以在JS中创建一个循环:

var i = 0;
var itemArray = $('.item');
var lastNumber = itemArray.length;
while(i <= lastNumber) {
    itemArray[i].className += ' first';
    i += 4;
}
var i=0;
var itemArray=$('.item');
var lastNumber=itemArray.length;

虽然(我认为这只适用于
.item
元素是普通父元素的唯一子元素的情况……太好了!但为什么是4n+1?@LightStyle:因为CSS与jQuery不同,是基于1的。非常感谢您的解释!我不知道!
如果它们不是同级元素,没有选择器可以帮助您。
-为什么解决方案需要一个选择器或者,就是这样?您可以轻松地筛选,或者至少先“缓存”
.item
元素,使其比opc更高效。首先将
$(“.item”)
的结果存储在变量中,然后使用jQuery的
.eq()
获得特定问题答案的方法相似的问题已经得到回答:请看-仅仅因为你可以并不意味着你应该这样做。我的答案真的那么可怕吗?它可能比使用jQuery函数循环更快。@MarcMarta试试。它会慢得多,因为它必须创建jQuery对象并进行选择
 lastNumber/4
次。jQuery的循环相当有效。是的,我注意到了。现在检查答案。jQuery的循环永远不会像您以本机方式编写代码那样有效-它必须创建一个函数并运行它。@RokoCBuljan True。当我开始编写这篇文章以实现更快的循环时,我实际上是在考虑向后循环。哟如果你是正确的,我会修改。