2017-08-04 59 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>