1

使用 DataTables 1.10,

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

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


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

4

4 回答 4

1

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']除了上述之外,DataTables 还将接受[[1,'asc']];我没有测试如果您传递一个 DataTables 无法使用的值会发生什么。)

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

于 2014-12-03T19:54:04.840 回答
1

When you are using dataTables 1.10.x already, why not use the API? By that it is easy :

table.rows().data()

returns an array of arrays containing the current content of the table, i.e the rows as they are currently sorted. So if you want to export or clone the content of a dataTable to a static table, you can actually do it very simple :

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

demo -> http://jsfiddle.net/zuxm2e68/

于 2016-02-20T14:27:54.320 回答
0

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

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

用于列和方向。看这里

于 2014-12-03T17:29:43.617 回答
0

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

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

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

于 2014-12-03T17:29:56.117 回答