1

我试图将最后一个添加到每个i完美除以 3 的值上,但我不希望索引 0 成为其中之一。谁能告诉我如何在除第一个项目之外的每个第三个项目上使用模数?

((i%3==0) ? 'last' : '');
4

4 回答 4

6
if (i!=0 && i % 3 == 0) ...

有时,与其试图为你的边缘情况寻找一个包容性的解决方案,不如明确地说你不想包括 0。

于 2012-11-21T15:12:39.287 回答
5

就像是:

if(i > 0 && i % 3 == 0) {
    // stuff ...
}

如果您需要做的只是将 CSS 类应用于除第一个元素之外的所有第三个元素,您应该能够:

$('.yourClass:nth-child(3n+4)').addClass('newClass');​

演示:http: //jsfiddle.net/uuBzD/

如果从 index 开始计数0,这会将类应用于元素369

于 2012-11-21T15:12:37.360 回答
1

这听起来可能太简单了,但如果它是一个for循环,您可以从 1 开始计数,并且不需要在每次迭代中都进行检查(性能稍好):

for ( var i = 1; i < arr.length; i++ ) {
  arr[i].className = i % 3 ? "" : "last";
}

如果您不需要为不是的className元素分配 ,那么您可以通过使用 来稍微提高性能:i %30if

for ( var i = 1; i < arr.length; i++ ) {
  if ( !( i % 3 ) ) {
    arr[i].className = "last";
  }
}

当然,如果你必须从 0 开始计数,你可以使用这个循环:

for ( var i = 0; i < arr.length; i++ ) {
  if ( !( i % 3 ) && ( i ) ) {
    arr[i].className = "last";
  }
}

之所以i!==0将条件放在后面,i % 3是因为第一个条件比较常见,几乎所有迭代都需要检查,所以性能会比i!==0每次迭代都盲目检查更好。

无论如何,以您自己的编码风格简短地回答它:

(i%3==0 && i ? 'last' : '');
于 2012-11-21T15:42:24.270 回答
1

在尝试了一些已发布的答案后,我发现最简单的解决方案是将 1 添加到索引以使计算基于非零:

var isThirdIteration = (i + 1) % 3 === 0;
于 2016-10-25T20:30:14.023 回答