JQuery表中*行*组的替代颜色

时间:2013-01-15 23:06:39

标签: jquery

我有一个包含多个TBODY元素的表(一年中每个月一个),并希望在TBODY元素中替换行颜色

为了说明,我有一个表格,其中包含以下基本结构:

<table>
  <tbody>
    <tr>
      <th>October</th>
      <th>Total</th>
    </tr>
    <tr>
      <td>Item 1</td>
      <td>500</td>
    </tr>
    <tr>
      <td>Item 2</td>
      <td>1000</td>
    </tr>
    <tr>
      <td>Item 3</td>
      <td>1400</td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <th>November</th>
      <th>Total</th>
    </tr>
    <tr>
      <td>Item 1</td>
      <td>800</td>
    </tr>
    <tr>
      <td>Item 2</td>
      <td>400</td>
    </tr>
    <tr>
      <td>Item 3</td>
      <td>200</td>
    </tr>
  </tbody>
  ... a <tbody> for all 12 months ...
</table>

以下JQuery调用:

<script type="text/javascript">
    $(function () {
        $("table > tbody > tr:even").addClass("alternate-row");
    });
</script>

但是,JQuery将整个表视为一个逻辑组,并将备用行类应用于每个奇数行,而不管TBODY 位置。

换句话说,我想要的是:

October (normal color)
  Item #1 (normal color)
  Item #2 (alt color)
  Item #3 (normal color)
November (normal color)
  Item #1 (normal color)
  Item #2 (alt color)
  Item #3 (normal color)
... etc

相反,我用上面的JQuery得到的是:

October (alt color)
  Item #1 (normal color)
  Item #2 (alt color)
  Item #3 (normal color)
November (alt color)
  Item #1 (normal color)
  Item #2 (alt color)
  Item #3 (normal color)
... etc

换句话说,由于某种原因,它无法识别TBODY选择器。我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

如果我正确理解了问题,可能就是您想要的:

$("table > tbody").each( function() {
    $("tr:even:not(:first)", this).addClass("alternate-row");
} );

jsfiddle

您的代码问题是一次选择所有TR。

答案 1 :(得分:1)

观看OP的原创'我想要的'

解决方案看起来更像

$(document).ready(function () {
  $("tbody").find("tr:even:not(:first)").addClass("alternate-row");
});

Fiddle