获取数组中的每个第n项

时间:2011-01-26 16:21:34

标签: javascript jquery

我有一系列HTML元素。我正在检查数组中的前一个对象是否像这样存在:

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;

我相信使用jQuery.grep()并检查(i % 4) == 0是否可能是答案,但由于我对Javascript的了解有限,我不知道如何将其应用到我现在所拥有的。

任何人都可以提供帮助?谢谢!

3 个答案:

答案 0 :(得分: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的答案中的回答类似。

答案 1 :(得分: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;
    }
});

答案 2 :(得分:1)

使用带有4的迭代作为递增步骤而不是通常的1。