我正在尝试理解Datatables中的自定义排序机制。我要做的是根据列的值对列进行排序,并根据其他列(包含组)的值进行排序,以获得groupwise排序。
为此,我遍历了排序插件:https://datatables.net/plug-ins/sorting/
作为一个例子(可能是另一个例子),我看了一下“反-这个”插件。为了达到目的,我添加了以下内容:
targets = "_all", type = "anti-the"到columnDefs
并使用
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"anti-the-pre": function ( a ) {
console.log("pre");
return a.replace(/^the /i, "");
},
"anti-the-asc": function ( a, b ) {
console.log("asc");
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"anti-the-desc": function ( a, b ) {
console.log("desc");
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );计划是对这三个函数进行调整,以获得所需的分组排序。
编辑:
让事情变得更清楚一点:让我们假设我有一个表格,其中包含了关于“部门”和“楼层”的信息/列,在对“楼层”进行排序时,我希望对每个部门的楼层进行排序。
分类前:
部门-楼层
1.信息技术.2
2.信息技术1
4.销售情况1
4.销售情况2
点击标题后(“地板”-> asc)
2.信息技术1
1.信息技术.2
4.销售情况1
4.销售情况2
再次单击(desc)
1.信息技术.2
2.信息技术1
4.销售情况2
4.销售情况1
在我所拥有的数据中,没有组(这里:部门)之间的混合,相同部门的->行将彼此相邻。
发布于 2016-04-28 12:01:23
当您试图对您的数据进行groupwise排序时,我建议您结合使用数据对象“正交数据”和HTML5数据-*属性
正如您可以在这里看到的(数据表网站.正交数据. HTML5),使用自定义属性data-order应该是您选择的武器。
例如:
您希望对department和floor进行分组,但只向用户显示department。此示例应显示所需的输出。
(姓氏单元格中的地板号码是一个可视化排序的助手,可以删除)
<table id="myTestTable" class="display">
<thead>
<tr>
<th>Department</th><th>Surname</th>
</tr>
</thead>
<tbody>
<tr>
<td data-order="it 1">IT</td> <td>Daniel (1)</td>
</tr>
<tr>
<td data-order="sales 2">sales</td> <td>Sue (2)</td>
</tr>
<tr>
<td data-order="it 1">IT</td> <td>John (1)</td>
</tr>
<tr>
<td data-order="it 2">IT</td> <td>Mr. Miyagi (2)</td>
</tr>
<tr>
<td data-order="sales 2">sales</td> <td>Mel (2)</td>
</tr>
<tr>
<td data-order="sales 1">sales</td> <td>Marc (1)</td>
</tr>
</tbody>
</table>
<script>
$('#myTestTable').dataTable();
</script>编辑:
第一个例子中的排序对于10层以上的楼层是错误的。它将是1、10、2、3、4等等,因为可数据将严格地对字符串进行排序。
为了解决这个问题,在datatable网站上有一个名为自然排序的排序插件。包括这段代码并将{ columnDefs: [ { type: 'natural' , targets: 0 } ] }添加到表定义中,会将排序修正为更多的human方式。
https://stackoverflow.com/questions/36911677
复制相似问题