【问题标题】:DataTables: Sorting table by columns, fixed i++ value?DataTables:按列排序表,固定 i++ 值?
【发布时间】:2016-02-12 17:35:04
【问题描述】:
<thead>
 <tr>
  <th class="nosort">#</th>
  <th>Name</th>
  <th>Age</th>
  <th>Location</th>
 </tr>
</thead>

我有表,我正在使用 DataTables 对列进行排序。我有一个生成以下单元格的 while 循环。

# |  Name  | Age| Location
----------------------------
1 | Donald | 37 | Sidney
2 | Janice | 54 | London
3 | Alice  | 44 | California

# 在循环中递增 i++。 DataTables 的“nosort”工作正常,我无法单击#。但是,例如,当我单击名称时,我想按名称对列进行排序,会发生以下情况。

# |  Name  | Age| Location
----------------------------
3 | Alice  | 44 | California
1 | Donald | 37 | Sidney
2 | Janice | 54 | London

如您所见,# 根据名称“更改”。我希望修复使用 i++ 创建的 # 列,仅显示位置,这样当我按名称或年龄排序时它不会改变。我怎样才能做到这一点?

编辑:我当前的代码

$('#example').dataTable({
   "paging": false,
   "info": false,
   "bFilter":  false,
   "order": [[ 1, "asc" ]],
"columnDefs": [{ "targets": 'nosort' }]
});

【问题讨论】:

标签: javascript php jquery sorting datatables


【解决方案1】:

我会使用drawCallback 来做到这一点:

..
drawCallback: function() {
  $('#example tbody tr').each(function(i, tr) {
    tr.children[0].textContent = i+1;
  })
}
..

演示 -> http://jsfiddle.net/hr8fy3vw/

由于栏目内容一直被重置,无需通过API。此外,当使用 jQuery 迭代 &lt;tr&gt; 的唯一 可见 行时,将被处理 - 与使用 API 的 every()each() 方法相比节省时间。

【讨论】:

  • 谢谢。它可以按预期在 jsfiddle 上运行,但不幸的是我没有设法让它与我自己的代码一起使用。那是我的坏事,因为在发现 DataTables 之前我对 jQuery 的经验为零。
  • @DxDogo,您是否在控制台中遇到任何错误等等...?
  • 最后我让它工作了,而且效果很好。谢谢!
【解决方案2】:

解决方案

如何添加索引列见Index column文章。

使用下面的代码并将example 更改为您的表ID。

var table = $('#example').DataTable();

table.on( 'order.dt search.dt', function () {
    table.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
        cell.innerHTML = i+1;
    } );
} ).draw();    

演示

有关代码和演示,请参阅this jsFiddle

【讨论】:

  • 谢谢。如果我想摆脱搜索并在一页中显示所有内容而不是每页 10 个,我需要如何更改它?有关当前代码,请参阅我编辑的第一篇文章。
  • @DxDogo,使用searching: false 禁用搜索,使用paging: false 禁用分页。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多