1

我在使用 CSS 样式表时遇到问题。

所以我的 HTML 文件中有一个表格:

<table class="altrowstable" id="alternatecolor">
<tr>
    <th>Info Header 1</th><th>Info Header 2</th><th>Info Header 3</th>
</tr>
<tr>
    <td>Text 1A</td><td>Text 1B</td><td>Text 1C</td>
</tr>
<tr>
    <td>Text 2A</td><td>Text 2B</td><td>Text 2C</td>
</tr>
<tr>
    <td>Text 3A</td><td>Text 3B</td><td>Text 3C</td>
</tr>
<tr>
    <td>Text 4A</td><td>Text 4B</td><td>Text 4C</td>
</tr>
<tr>
    <td>Text 5A</td><td>Text 5B</td><td>Text 5C</td>
</tr>
</table>

这是我的 JavaScript 文件:

function altRows(id){
if(document.getElementsByTagName){  

    var table = document.getElementById(id);  
    var rows = table.getElementsByTagName("tr"); 

    for(i = 0; i < rows.length; i++){          
        if(i % 2 == 0){
            rows[i].className = "evenrowcolor";
        }else{
            rows[i].className = "oddrowcolor";
        }      
    }
  }
 }
 window.onload=function(){
altRows('alternatecolor');
 }

这是我的 CSS 文件:

table.altrowstable {
    font-family: verdana,arial,sans-serif;
    font-size:11px;
    color:#333333;
    border-width: 1px;
    border-color: #a9c6c9;
    border-collapse: collapse;
}
table.altrowstable th {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #a9c6c9;
}
table.altrowstable td {
    border-width: 1px;
    padding: 8px;
        border-style: solid;
    border-color: #a9c6c9;
}

table.oddrowcolor{
    background-color:#d4e3e5;
}
table.evenrowcolor{
    background-color:#c3dde0;
}

问题是它没有改变颜色,既不是奇数行也不是奇数。

我究竟做错了什么?

谢谢。

4

5 回答 5

7

我将为您提供一个 CSS 解决方案:

table.class_name tr:nth-child(odd) {
   /* Styles */
}

table.class_name tr:nth-child(even) {
   /* Styles */
}

这就是您所需要的,尽管 IE 8 和更早版本不支持它。

演示

对于您的表格标题,您可以简单地使用不同的选择器来覆盖背景样式,例如

table.altrowstable tr th {
    background: #fff;
}

演示 2

于 2013-07-24T09:38:02.177 回答
2

我喜欢提供不修补修改原始源的解决方案。您的HTML很好,JScript很好(非常好)。很高兴看到您使用 .classname 以便跨浏览器兼容。所以我所做的只是更改CSS的类

你的代码

table.oddrowcolor {
    background-color:#d4e3e5;
}
table.evenrowcolor {
    background-color:#c3dde0;
}

我的改变

tr.oddrowcolor {
    background-color:#d4e3e5;
}
tr.evenrowcolor {
    background-color:#c3dde0;
}

工作小提琴

从您的代码到我的代码的总变化。8 个字符。是不是很简单?

于 2013-07-24T10:04:07.753 回答
2

我确实检查了您的代码,发现需要在 css 中进行一些更正才能获得预期的解决方案。表和行类名之间应该有一个空格。

table .oddrowcolor{
   background-color:#d4e3e5;
}
table .evenrowcolor{
   background-color:#c3dde0;
}
于 2013-07-24T09:55:16.273 回答
0

你的 CSS 有问题。您正在为 table 设置类,而应该为 td 设置类。

您还需要修改下面的 js,因为样式可以应用于td而不是tr

var rows = table.getElementsByTagName("td"); 

这是您的 CSS 中的问题

table.oddrowcolor{
    background-color:#d4e3e5;
}
table.evenrowcolor{
    background-color:#c3dde0;
}

你应该改用这个

table td.oddrowcolor{
    background-color:#d4e3e5;
}
table td.evenrowcolor{
    background-color:#c3dde0;
}

jsFiddle

于 2013-07-24T09:53:12.297 回答
-2

试试这个……看演示

tr:nth-child(even) {background: #CCC}
tr:nth-child(odd) {background: #FFF}
于 2013-07-24T09:39:51.893 回答