【问题标题】:Alternating non-sequential row colors in jQuery在jQuery中交替非顺序行颜色
【发布时间】:2013-06-07 22:52:35
【问题描述】:

我会重新开始。我有一张从远程服务器拉出的桌子。该表有白色奇数行和灰色偶数行。我隐藏了一些行:

$("td").filter(function(){ return $(this).text()=='R1';}).text('Row1'); //white
$("td").filter(function(){ return $(this).text()=='R2';}).text('Row2'); //grey
$('tr:nth-child(3)').hide();                                            //white
$("td").filter(function(){ return $(this).text()=='R4';}).text('Row4'); //grey
$('tr:nth-child(5)').hide();                                            //white
$("td").filter(function(){ return $(this).text()=='R6';}).text('Row6'); //grey
$("td").filter(function(){ return $(this).text()=='R7';}).text('Row7'); //white

现在我的表格行不再交替,而是白色、灰色、灰色、灰色、白色。我如何让它们再次交替?创建一个类,如:$("tr").filter(":even").addClass("even"); + css tr.even td{background-color: blue;} 使其变为白色、蓝色、蓝色、蓝色、白色,因此它仍然不会交替。

我可以做到这一点$('tr:nth-child(4)').each(function(i){ $(this).find('td').css('background-color', 'white');});,它适用于白色、灰色、白色、灰色、白色。但是有一个问题!第 4 行有我想保持红色的红色单元格。上面的代码将红色单元格覆盖为白色。

来自服务器的样式是:

<script src="remoteserver/sorttable.js"></script>
<style type = "text/css">';
    td.datacellone{
        background-color: #C0C0C0;
    }
    th.datacellheader{
        background-color: #6A5ACD;
    }
    td.alert{
        background-color: #FF0000;
    }
    td.orange{
        background-color: #FFA500;
    }
    td.green{
        background-color: #008000;
    }
</style>

我希望当行交替为白色和灰色时,此红色警报颜色保持红色。

【问题讨论】:

  • 你能让服务器用!important 发送它吗?
  • 使用!important 是一个非常糟糕的主意

标签: jquery css html-table


【解决方案1】:

假设您有名为 evenodd 的类,请尝试以下操作:

var $trs = $('tr').removeClass('even odd').filter(':visible');
$trs.filter(':even').addClass('even');
$trs.filter(':odd').addClass('odd');

也就是说,从 tr 元素中删除任何现有的 evenodd 类,然后使用 :visible selector 来处理您没有隐藏的那些。

演示(还显示了单个红色单元格如何不受行类的影响):http://jsfiddle.net/J5DqP/1/

【讨论】:

  • 嗨 nnnnnn。您的建议实际上适用于我添加的 css tr.even td{background-color: #C0C0C0;} tr.odd td{background-color: #FFFFFF;}。我的行再次交替,除了现在我们需要使红色单元格保持红色。我们如何做到这一点?
  • 我更新了我的演示,表明您可以保留红细胞。但是,you 一开始是如何将它们设置为红色的呢?另外,为什么不只是tr.even {background-color...?您实际上并不需要 CSS 选择器中的 td。 CSS 级联, 所以如果你将奇数和偶数应用于行,然后将红色应用于可能解决问题的单元格。
  • 好的,我会详细说明一下。我一开始没有将单元格设置为红色。我正在从远程服务器拉一张表格,其单元格根据单元格数据更改颜色为绿色、橙色、红色。如果单元格数据为 100%,则单元格为绿色,如果为 80%,则为橙色,如果为 60%,则为红色。您的演示是对红细胞进行硬编码。我不能这样做,因为单元格数据经常更改。至于省略tr.odd {background-color...,交替行停止工作。但我知道 css 应该级联,但事实并非如此。
  • 我更新了我的原始帖子以添加远程服务器正在应用的样式。 &lt;script src="remoteserver/sorttable.js"&gt;&lt;/script&gt; &lt;style type = "text/css"&gt;';...
  • 按照我的演示应该仍然可以工作。请注意,在我的演示中,灰色和白色奇偶类适用于 tr 元素,而红色类适用于 td 元素。您添加到问题中的样式也适用于 td 元素,因此它们应该以相同的方式工作。
【解决方案2】:

一种简单的方法是重新应用这些类。

 var $table = $('table');
 $('tr:even', $table).addClass('even');
 $('tr:odd', $table).addClass('odd');

  //Remove 1 td

  $('tr', $table).removeClass('even odd'); // Remove both the classes
  $('tr:even', $table).addClass('even');
  $('tr:odd', $table).addClass('odd');

**EDIT**

如果您可以更改正在添加的样式,请替换

td.alert{ background-color: #FF0000; }

tr td.alert{ background-color: #FF0000; }

tr.odd td.alert, tr.eventd.alert, { background-color: #FF0000; }

【讨论】:

  • 嗨,苏珊斯。谢谢你的建议。你的方法可能太简单了,我无法理解。我把你的代码贴在我之后,什么也没发生。我需要在我的CSS中添加任何东西吗?请详细说明。
  • 您需要将 CSS 类定义到您的样式表或定义它们的位置
  • nnnnnn 的建议有效。他和你的很相似,只是 :visible 是它起作用的原因。我仍然需要你的帮助来保留红细胞,因为交替的灰色和白色行将红细胞覆盖为白色和/或灰色。
  • 你如何定义其他 td 的样式.. 看起来像是一个特异性问题
  • 就 td 而言,这就是我在 css 中的全部内容td{padding: 0.5em; border: 1px solid red;}
猜你喜欢
  • 1970-01-01
  • 2015-08-16
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
相关资源
最近更新 更多