获取数组中的每个第n项

我有一系列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的了解有限,我不知道如何将它应用到我现在拥有的。

有人可以帮忙吗? 谢谢!

您可以在循环中使用模数运算符来查看您是否处于第四个间隔。

问题得到了澄清。

 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; } }); 

你能不能只使用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的答案中对你的回答。

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