2013-05-27 72 views
0

我想在表中使用jQuery添加交替颜色。问题是我正在使用Knockout,每个样式都适用于所有tr。我的问题是在这里:http://jsfiddle.net/PUc3J/2/Knockout JS表hil

$(function(){ 
    $(".tk-table tbody tr") 
     .each(function(i){ 
      if(i % 2 == 0){ 
       $(this).addClass('hilight'); 
      } 
     }) 
}); 

THX

+2

你的HTML标记** **无效。你没有正确关闭你的'table'和'tr'。如果你修复它,它会工作:http://jsfiddle.net/VUSFB/ – nemesv

+0

对不起,键入时打开。谢谢。 –

回答

5

只要你不关心,你可以使用单独的CSS来完成替代表格的行颜色。关于支持Internet Explorer 8或更低版本。

http://jsfiddle.net/GJw7R/

.tk-table tbody tr:nth-child(odd) { 
    background-color: #eaeded; 
} 

引用:
1. http://davidwalsh.name/css-tables-css3-alternate-row-colors
2. Twitter Bootstrap tables


另外,您可避免诉诸jQuery和只使用 css binding in Knockout

http://jsfiddle.net/9UDkg/

<tbody data-bind="foreach: data"> 
    <tr data-bind="css: $index() % 2 === 0 ? 'hilight' : ''"> 
     <td><p data-bind="text: online"></p></td> 
     <td><p data-bind="text: name"></p></td> 
     <td><p data-bind="text: email"></p></td> 
    </tr> 
</tbody> 

......或者......

http://jsfiddle.net/ZDDrT/

<tr data-bind="css: {'hilight': $index() % 2 === 0}"> 
2

见更新小提琴,我定你的HTML:http://jsfiddle.net/tkirda/PUc3J/3/

此外,还有更简单的找到交替行的方式:

$(".tk-table tr:odd").addClass('hilight'); 
+0

这个jQuery的问题在于,当knockout由于observable被更改而清除表格时,由于DOM元素被重构,样式将会丢失。 mg1075s纯粹的CSS解决方案或使用绑定是正确的方法。编辑:一般来说,无论何时你想在KO应用中使用jQuery,你都需要将绑定中的调用封装起来,以便在KO改变DOM时调用jQuery。 – Svend

+0

同意你100%。 –