jquery dataTables 插件可以在排序/过滤后尊重备用行颜色吗?

Posted

技术标签:

【中文标题】jquery dataTables 插件可以在排序/过滤后尊重备用行颜色吗?【英文标题】:Can the jquery dataTables plugin respect alternate row colors after sorting/filtering? 【发布时间】:2015-08-27 16:29:14 【问题描述】:

我正在使用jquery datatables plugin,这似乎是一个有用的插件,可以获取常规 html 表格并添加排序、过滤、分页等

我看到的一个问题是,当我搜索时,它似乎没有更新“奇数”/“偶数”行类,所以如果我的表有 100 行但当我过滤它有 10 行时,可能所有 10 行都是相同的背景色或8个相同的背景色

我在按列排序后也看到了同样的问题,在我按列排序后,它可能会“聚集”一堆背景颜色相同的行。

无论如何,数据表插件是否可以在过滤器之后重新应用偶数/奇数样式,所以无论您过滤什么,总会有备用行背景色?

【问题讨论】:

此功能默认可用,请参阅Default styling options。你确定你正在使用display 类或至少stripe 类用于<table> 过滤行后似乎不成立 您能否提供一个链接到您的页面或 JSFiddle 上的示例来演示该问题?您使用的是什么版本的 DataTables?您的 DataTables 初始化选项是什么? 第二次请求代码示例。 DataTables 肯定会在重绘时更新条带化。听起来您可能正在从插件外部处理过滤,在这种情况下您肯定会遇到问题。没有看到代码就忍不住 【参考方案1】:

原因

此功能默认可用。这种异常行为的最可能原因是:

您在 CSS 中覆盖 oddeven 类,或者 您的代码在过滤后会影响表结构

解决方案 #1

    Default stylingjQuery UIFoundation

    为您的<table> 使用类display,如下所示。有关所有可用类的列表,请参阅 Default styling options。

     <table id="example" class="display" cellspacing="0" >   
    

    请参阅this jsFiddle 进行演示。

    Bootstrap

    为您的&lt;table&gt; 使用类table table-striped table-bordered,如下所示:

     <table id="example" class="table table-striped table-bordered" cellspacing="0" >
    

    请参阅this jsFiddle 进行演示。

解决方案 #2

如果有覆盖 oddeven 类的 CSS 规则,您可以通过 stripeClasses 选项指示 jQuery DataTables 使用替代类。

$('#example').DataTable( 
  "stripeClasses": [ 'odd-row', 'even-row' ]
 );

【讨论】:

【参考方案2】:

要存档,您必须使用 Base style - no styling classes datatable 要做到这一点,只需从 table tag 中删除数据表类

之后为odd(例如myodd)和even(例如myeven)行创建您自己的类。

现在的下一个任务是将这些类应用于每个表格绘制装置上的表格行:

1.何时应用过滤器

2.当可见记录的限制发生变化等时

要做到这个数据表提供rowCallback()你可以这样使用:

 $('#myTabel').dataTable(
        "rowCallback": function( row, data, index ) 
            if(index%2 == 0)
                $(row).removeClass('myodd myeven');
                $(row).addClass('myodd');
            else
                $(row).removeClass('myodd myeven');
                 $(row).addClass('myeven');
            
          
    );

请注意:

为了避免 css rule 中的 !importantoddeven 定义 css rule,如下所示:

table.dataTable tbody tr.myeven
    background-color:#f2dede;

table.dataTable tbody tr.myodd
    background-color:#bce8f1;

演示: http://jsfiddle.net/ishandemon/4za80xky/

【讨论】:

此功能默认可用,见Base style,无需使用rowCallback【参考方案3】:

我的这条评论适用于如何删除或修改 Jquery Datatable Row 类

数据表现在提供了一个可选的 json 参数,该参数的名称与其 1.10+ documentation 的定义相同。

因此,如果您想完全删除奇偶类,请在表初始化期间使用以下参数。

$('#example').dataTable( 
  "stripeClasses": [] //Empty Array.
 );

所以 如果你想在每一行数据表上应用自定义 css 类

$('#example').dataTable( 
  "stripeClasses": ['yourRowClass']
 );

如果您想应用超过 1 个 css 类(以奇偶或顺序方式),这样这些类将在每第 n 行完成后重复它们自己,然后使用它

$('#example').dataTable( 
  "stripeClasses": [ 'strip1', 'strip2', 'strip3' ] //This combination will repeat always 3rd row
 );

DataTables 将按顺序应用每个类,并在需要时循环。

【讨论】:

【参考方案4】:

我知道这是旧的,但我不得不扩展上述解决方案。我允许用户调整条纹颜色,所以我必须这样做:

rowCallback: (row, data, index) => 
  const stripeColor = this.options.stripeColor;

  if (index % 2 == 0) 
    $(row).removeClass('odd-row even-row');
    $(row).addClass('odd-row');

    if (!!this.options.stripe) 
      $(row).css( background: 'transparent' )
    
   else 

    $(row).removeClass('odd-row even-row');
    $(row).addClass('even-row');

    if (!!this.options.stripe) 
      $(row).css( background: stripeColor )
    
  
,

【讨论】:

以上是关于jquery dataTables 插件可以在排序/过滤后尊重备用行颜色吗?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Datatables Ultimate 日期/时间排序插件

在 jquery 中的 DataTables 插件中排序不起作用

Jquery datatables 插件,排序/过滤数据后显示“表中没有可用数据”

jQuery 插件 (DataTables) 仅在页面刷新时正确加载

如何删除 jQuery DataTables 插件添加的搜索栏和页脚?

jQuery dataTable 不显示排序图标