2011-01-26 128 views
7

我有一个HTML元素数组。我正在检查阵列中的前一个对象是否存在这样的:获取数组中的每个第n个项目

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ // going through the array 
    var prevBox = i>0?$(boxes[i-1]):false; // check whether a previous box exists 
    if (prevBox) { } // do something 
    else { } // do something else 
}); 

这很好。但是我还需要检查数组中每个第四个对象(盒子)的存在,或者更确切地说,是否存在一个对象是当前对象之前的三个对象。

这不起作用:

var prevBox = i>0?$(boxes[i-4]):false; 

我相信使用​​和检查,如果(i % 4) == 0可能是答案,但我有限的JavaScript的知识,我不知道如何将它应用到我现在有了。

任何人都可以帮忙吗?谢谢!

回答

3

您可以在循环中使用modulus operator以查看您是否处于第四个间隔。

问题已澄清。

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ 
    if(i >= 3) { 
     var prevBox = boxes.eq(i - 3); 
     var pos = prevBox.position(); 
     var top = pos.top; 
    } 
}); 
1

使用迭代以4为增量步骤,而不是通常的1

16

你能不能只用一个for循环?

for (var i=0; i< boxes.length; i+=4) 
    { 
    // do stuff with boxes[i] 
    } 

我对JQuery没有什么特别的看法,但是在常规的JavaScript中可以正常工作。

编辑:你有点重新描述的问题,所以要作用于每一个项目,但做具体在第四的东西...

var previousTop; 
for (var i=0; i< boxes.length; i++) 
    { 
    // do stuff with boxes[i] 
    if (((i+1) % 4) === 0) 
     { 
      previousTop = boxes[i].position.top; 
      // do stuff with the fourth item 
     } 
    } 

这里更广泛范围的previousTop然后被设置在你做任何你需要做的事情之前,每第四项。然后,当你到达下一个第四个元素时,你在临时变量中获得前一个元素的值,这听起来类似于你对@patrick dw下面的答案的回应。

+0

谢谢!我想在.each()循环内部做到这一点,因为我已经在里面做了其他的东西。 – hannu 2011-01-26 17:15:16

+0

做同样的事情,并增加一,然后,而不是匿名函数只有几行代码。更透明,更易于调试。 – glenatron 2011-01-26 17:36:32