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()
。