2016-06-26 61 views
0

我有非常簡單的代碼循環通過數組中的元素,並檢查是否index % 2 == 0。如果是這樣,它應該改變顏色。if-condition被滿足但它不適用(模)

var e = document.getElementById("list").childNodes; 
for(i = 0; i < e.length; i++){ 
    console.log(i % 2); 
    if(i % 2 == 0) 
     e[i].style = "color: red"; 
} 

而這只是不工作。即使console.log(i % 2)每隔兩秒打印0。如果我將其更改爲if(true),它們全部變爲紅色。我究竟做錯了什麼?

+0

哦,就是這樣,孩子!謝謝 –

+0

這也可以用CSS完成,順便說一句:[':nth-​​of-type'](https://developer.mozilla.org/en/docs/Web/CSS/:nth-of-type )。 – Xufox

回答

3

應該var e = document.getElementById("list").children;,而不是var e = document.getElementById("list").childNodes;

childNodes包括文本節點。它們不僅沒有style屬性,而且在每個列表項之後都有可能出現循環所適用的換行符,因爲每個第二個子節點都是換行符。

例如

<ul id="list"> 
    <li>A</li> 
    <li>B</li> 
    <li>C</li> 
</ul> 

指:

<ul id="list">: 
    #text " \n" 
    <li>: 
    #text "A" 
    #text " \n" 
    <li>: 
    #text "B" 
    #text " \n" 
    <li>: 
    #text "C" 
    #text "\n" 

childNodes都是<li> S和所有#text秒。該循環可能只針對文本節點。 children僅包括所有<li> s。

此外,最好使用e[i].style.color = "red";

-1

該代碼似乎很好,但你可以嘗試添加圓括號嗎?

if((i % 2) == 0) 
+0

我試過了,我嘗試了===但它仍然不起作用 –

+0

你可以試試這個:if((i%2))@ J.Doe – MoustafaS

+0

同樣的結果奇怪:/ –

0

var e = document.getElementsByTagName("li"); 
 

 
for(i = 0; i < e.length; i++){ 
 
    console.log(i % 2); 
 
    if(i % 2 == 0) 
 
     e[i].style = "color: red"; 
 
}
<ul> 
 
    <li id="list">test</li> 
 
<ul>

嘗試使用getElementsByTagName