数据表的显式排序

Explicit Sorting for datatables

我的数据表中有一列包含状态信息(即非常好、好、好的、差、非常差),我想按状态排序,而不是按字母顺序排序。我该怎么做?

我刚刚编了这个属性,但是有这样的东西吗?

$("#myTable").DataTable({
    "sortArray": ['very good', 'good', 'ok', 'bad', 'very bad']
});

我确实查看了数据表文档并找到了 custom sorting,但据我所知,它使用字母和数字等类型。

编辑:我不能使用 HTML5 因为它必须与 IE9 兼容。

您可以为每个状态分配一个数值(即 1 -> 非常好,2 -> 好等),然后使用 DataTables 的列呈现功能将您的数值映射回文本状态。

DataTables Column rendering

解决方案 1

您可以使用 columnDefs to target a specific column using zero-based index in targets option and columnDefs.render to return numerical value during sorting (type === 'sort'). jQuery helper method $.inArray() 用于 return 基于提供的值的数组索引。

$('#myTable').dataTable( {
    "columnDefs": [
        {
            "targets": 0,
            "render": function ( data, type, row, meta ) {
                if(type === 'sort'){
                   var values = ['very good', 'good', 'ok', 'bad', 'very bad'];
                   data = $.inArray(data, values);
                }

                return data;
            }
        }
    ]
} );

解决方案 2

替代解决方案是使用 data- 属性,如 HTML5 data-* attributes 示例所示。

如果您有静态 HTML 数据,您可以如下所示创建行,然后 jQuery DataTables 选取 data- 属性并使用它们进行搜索。

<tr>
    <td>T. Nixon</td>
    <td>System Architect</td>
    <td data-order="1">very good</td>
</tr>
<tr>
    <td>T. Nixon</td>
    <td>System Architect</td>
    <td data-order="2">good</td>
</tr>