2017-08-04 57 views
-2

我知道如何使用jQuery做到這一點,這樣做:更改表的TR:即使有不同的背景顏色

$("#rateTable tr:even").css("background", "#e7edea");

不過,我使用不會讓jQuery的格式。我嘗試了下面的代碼,但它表示樣式爲空。有沒有人看到我在做什麼錯了?

document.getElementById("rateTable tr:even").style.background = "#e7edea";
<table id="rateTable"> 
 
    <tr> 
 
    <td>Blue</td> 
 
    <td>Green</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Red</td> 
 
    <td>Purple</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Teal</td> 
 
    <td>Yellow</td> 
 
    </tr> 
 
</table>

+2

'getElementById'需要一個ID,而不是一個選擇。另外,爲什麼你不使用CSS呢? '#rateTable tr:n-child(even){ background:#e7edea }' – j08691

+0

應該是'document.querySelectorAll(「#rateTable tr:nth-​​child(even)」)'...然後你需要循環通過結果 – LGSon

回答

5

你真的不需要JavaScript來做這件事。它可以用純粹的CSS與nth-child pseudo-class完成。

tr:nth-child(even) { 
 
    background: #E7EDEA; 
 
}
<table id="rateTable"> 
 
    <tr> 
 
    <td>Blue</td> 
 
    <td>Green</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Red</td> 
 
    <td>Purple</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Teal</td> 
 
    <td>Yellow</td> 
 
    </tr> 
 
</table>

+0

如果需要動態更改? – MysterX

+1

此實例不需要動態更改。我不知道我可以用CSS做到這一點,所以這是完美的。謝謝! – Paul

1

嘗試使用querySelectorAll旁邊疊代收到收集改變的背景。見下:

var trToChange = document.querySelectorAll("#rateTable tr:nth-child(even)"); 

for(var i = 0; i < trToChange.length; i++){ 
    trToChange[i].style.background = "#e7edea"; 
} 
+1

應該是'querySelectorAll(「#rateTable tr:nth-​​child(偶數)」) – j08691

+0

當然,謝謝 – MysterX

1

您可以#rateTable tr:nth-of-type(even)爲您選擇這樣做。 document.selectElementById()只有在你給它一個用作id的確切字符串時纔有效,而不是CSS選擇器。我會用CSS這樣做,因爲它會自動更新,並有可能更快,但如果你願意,你可以做到這一點的JS:

const evenRows = document.querySelectorAll("#rateTable tr:nth-of-type(even)") 
 
for (const row of evenRows) row.style.background = "#e7edea"
<table id="rateTable"> 
 
    <tr> 
 
    <td>Blue</td> 
 
    <td>Green</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Red</td> 
 
    <td>Purple</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Teal</td> 
 
    <td>Yellow</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Orange</td> 
 
    <td>Pink</td> 
 
    </tr> 
 
</table>