我试图将最后一个添加到每个i
完美除以 3 的值上,但我不希望索引 0 成为其中之一。谁能告诉我如何在除第一个项目之外的每个第三个项目上使用模数?
((i%3==0) ? 'last' : '');
我试图将最后一个添加到每个i
完美除以 3 的值上,但我不希望索引 0 成为其中之一。谁能告诉我如何在除第一个项目之外的每个第三个项目上使用模数?
((i%3==0) ? 'last' : '');
if (i!=0 && i % 3 == 0) ...
有时,与其试图为你的边缘情况寻找一个包容性的解决方案,不如明确地说你不想包括 0。
就像是:
if(i > 0 && i % 3 == 0) {
// stuff ...
}
如果您需要做的只是将 CSS 类应用于除第一个元素之外的所有第三个元素,您应该能够:
$('.yourClass:nth-child(3n+4)').addClass('newClass');
演示:http: //jsfiddle.net/uuBzD/
如果从 index 开始计数0
,这会将类应用于元素3
、6
等9
。
这听起来可能太简单了,但如果它是一个for
循环,您可以从 1 开始计数,并且不需要在每次迭代中都进行检查(性能稍好):
for ( var i = 1; i < arr.length; i++ ) {
arr[i].className = i % 3 ? "" : "last";
}
如果您不需要为不是的className
元素分配 ,那么您可以通过使用 来稍微提高性能:i %3
0
if
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' : '');
在尝试了一些已发布的答案后,我发现最简单的解决方案是将 1 添加到索引以使计算基于非零:
var isThirdIteration = (i + 1) % 3 === 0;