jQuery DataTables 1.10:它现在在哪一列上排序

jQuery DataTables 1.10: Which column is it sorted on right now?

本文关键字:一列 排序 jQuery DataTables      更新时间:2023-09-26

Using DataTables 1.10,

我有一个具有默认排序的DataTable,用户可以按其他一些列进行排序。

如何检测表当前排序所依据的列?


一些可能与回答问题无关的上下文:我真正想做的是将表"导出"到非交互式 HTML 表。 此 DataTable 以编程方式生成,然后转换为 DataTable,因此在搜索导出选项后,看起来重新生成原始表比实际导出更容易。 但是我需要重新生成的表使行与当前排序的顺序相同。

可以像这样检索当前排序状态sortInfo

var apiObject = $("#myPlainTable).DataTable( dtOptions );
// ...
var sortInfo = apiObject.settings().order()

更具体地说,列和方向的编码方式如下:

var sortCol = sortInfo[0][0]; // counting from left, starting with 0
var sortDir = sortInfo[0][1]; // either "asc" or "desc"

警告:

用户更改排序后,sortInfo对象将具有上述格式;如果通过使用其他格式dtOptions.order设置来指定初始排序,则sortInfo对象将具有您指定的原始值,直到用户更改排序为止。 (例如,除了上述[[1,'asc']]之外,数据表还将接受[1,'asc'];我没有测试如果您传递数据表无法使用的值会发生什么。

这描述了仅按一列排序而不使用多列排序功能的默认情况。

当你已经在使用dataTables 1.10.x时,为什么不使用API?这样很容易:

table.rows().data()

返回一个数组数组,其中包含表的当前内容,即当前排序的行。所以如果你想将dataTable的内容导出或克隆到静态表,你实际上可以非常简单地做到这一点:

$("#clone").click(function() {
  var cloneTable = '';
  table.rows().data().each(function(row) {
    cloneTable += '<tr><td>' + row.join('</td><td>') + '</td></tr>';
  })
  $('#cloneTable tbody').html(cloneTable);
})

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

如果发送到服务器,请检查

order[i][column] 
order[i][dir] 

用于列和方向。请参阅此处

由于您使用的是 1.10,因此可以使用以下内容:

var table = $('.myTable').dataTable({ /* Your options */ });
var sortArray = table.api().settings().aaSorting; // gives array

如果您已经通过 $('.myTable').DataTable({...}) 使用 API,则可以省略.api()