2012-11-21 19 views
1

我試圖添加最後每個i值完全除以3,但我不希望索引0是其中之一他們。任何人都可以告訴我,除了第一個項目以外,我可以如何使用模數?使用JavaScript模數將類添加到每個第三項,但不希望這應用於第一個0

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

只要檢查'i!= 0'以及'i%3 == 0'。 –

+2

只需注意:如果您打算僅將其用於樣式設計,請查看CSS選擇器。例如'li:nth-​​child(3n)'將爲每3個元素應用樣式(它從1開始計數)。 – AlexStack

+1

@AlexStack - 完全沒有必要循環索引或任何明確的條件在這種情況下 – techfoobar

回答

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

有時候,而不是試圖找到你的優勢情況下,包容性的解決方案,只是明確,說你不想包括0.

4

喜歡的東西:

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

如果你需要做的是應用CSS類不包括第一個所有第三元素,你應該能夠只是做:

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

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

如果計數開始於指數0,這將適用於類元素369等..

+0

人們應該說明一個觀點,解釋他們爲什麼downvoted 。否則,它只是不對。 – techfoobar

1

這聽起來可能太簡單了,但如果它是一個for循環,你可以從1開始計數,並且不必在每次迭代中進行檢查(性能稍好一些):

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

如果您不需要分配className的元素i %30那麼你就可以提高性能,通過使用稍多的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' : ''); 
+0

人們應該解釋爲什麼他們低估了。否則,它只是不對。 – techfoobar

+0

。這意味着降低迴答而不是給出反饋。我們在這裏相互學習。 – AlexStack

0

嘗試一些張貼的答案後,我發現最簡單的解決辦法是1添加到索引進行計算非零基於:

var isThirdIteration = (i + 1) % 3 === 0; 
相關問題