17

我的桌子风格非常好。

{抱歉链接不再有效}

我必须添加 sClass 以便新行(由 fnAddData 添加)获得正确的类。

不幸的是,这破坏了我的布局,因为这些类也被添加到我的表头单元格中!

{抱歉链接不再有效}

如何将 sClass 配置为仅适用于 TBODY 单元?

澄清:

  var rolesTable = $('#roles').dataTable({
      "aoColumns": [
        { "mDataProp": "id", "sClass": "avo-lime-h avo-heading-white" },
        { "mDataProp": "name", "sClass": "avo-light" },
        { "mDataProp": "module", "sClass": "avo-light" },
        { "mDataProp": "description", "sClass": "avo-light" },
        { "mDataProp": null, "bSearchable": false, "bSortable": false, 
          "sDefaultContent": '<button type="button" name="add" class="btn"><i class="icon-plus icon-white"></i></button>' }, 
      ],
  }); // end od dataTable

这样当我打电话时

rolesTable.fnAddData( { 
    "id": 10, 
    "name": "testname", 
    "module": "testmodule", 
    "description": "testdescription" 
} );

然后添加的行如下所示:

<tr>
    <td class="avo-lime-h avo-heading-white">10</td>
    <td class="avo-light">testname</td>
    <td class="avo-light">testmodule</td>
    <td class="avo-light">testdescription</td>
    <td></td>
</tr>

这完全没问题

**问题是**此设置还将这些类添加到:

<thead>
    <tr> (...) </tr>
</thead>

表头单元格......我不想要

4

4 回答 4

30

我的问题的解决方案是:使用 fnRowCallback 而不是 sClass 将类设置为新行。

  var rolesTable = $('#roles').dataTable({
      "aoColumns": [
        { "mDataProp": "id" },
        { "mDataProp": "name" },
        { "mDataProp": "module" },
        { "mDataProp": "description" },
        { "mDataProp": null, "bSearchable": false, "bSortable": false, 
          "sDefaultContent": '<button type="button" name="add" class="btn btn-round"><i class="icon-plus icon-white"></i></button>' }, 
      ],
      "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
          $('td:eq(0)', nRow).addClass( "avo-lime-h avo-heading-white" );
          $('td:eq(1),td:eq(2),td:eq(3)', nRow).addClass( "avo-light" );
        }
  }); // end od dataTable
于 2012-06-11T21:14:03.023 回答
6

由于您仅使用 sClass 将样式应用于表格,因此解决问题的简单方法是将 CSS 本身修改为仅应用于 td 元素。

旧 CSS 样式:

.avo-light {
    color: blue;
}

新的 CSS 样式:

td.avo-light {
    color: blue;
}

这样,尽管 sClass 也应用于元素,但 CSS 只会影响您对应用样式感兴趣的单元格。

我意识到这个问题有点老了,但我发现它比最佳解决方案更加模块化。

于 2013-08-02T15:58:17.957 回答
2

之前设置默认类。

$.fn.dataTableExt.oStdClasses.sStripeOdd = '';

$.fn.dataTableExt.oStdClasses.sStripeEven = '';

如需进一步参考,请参见此处 http://www.datatables.net/styling/custom_classes

于 2013-04-23T07:55:00.647 回答
2
  let table = $("#myTable").dataTable();
  table.rows().every(function(rowIdx, tableLoop, rowLoop){
    $(this.node().cells[0]).addClass('red');
    $(this.node().cells[1]).addClass('blue');
  }

呈现表格后,使用每行的 JavaScript 选择器遍历所有行并进行所需的任何更改。这解决了 gamliela 在 loostr 的回答中提出的性能问题。数据表 rows().every() 文档

于 2016-09-26T19:46:54.877 回答