令人敬畏的datatables插件(datatables.net)能够通过在单击标题时保持移位来进行多列排序。
有没有办法在没有按住shift修饰符的情况下启用它?我完全不知所措:(
答案 0 :(得分:2)
奇怪的要求。当然这是有原因的。如果你没有按住shift的要求,你怎么知道用户是想要自己按第二列排序,还是想要按两列排序?如果用户单击以对列A进行排序,则单击以对列B进行排序 - 用户是否要按A和B排序或仅按B排序?
无论如何,我没有看到在Datatables中做到这一点的方法。如果必须具有此功能,则可以修改源。如果您从此处下载非最小化版本,例如:http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.js,然后搜索e.shiftKey
,您将看到代码。而不是if ( e.shiftKey )
,只需将其设为if(true)
,或注释掉if。
答案 1 :(得分:1)
这是一个解决方案。 (使用数据表版本1.10.12测试)
您必须取消绑定click事件并手动重新创建排序功能。
首先,在数据表中添加一个类:
<table class="datatableMultiSorting">
然后添加JS:
$('.datatableMultiSorting th').unbind('click.DT');
$('.datatableMultiSorting th').click( function () {
currentTable = $(this).closest(".datatableMultiSorting").dataTable();
thisIndex = $(this).index();
//console.log(thisIndex);
var sortArray = [];
$(this).siblings().andSelf().each(function(index) {
if(index==thisIndex){
if ($(this).hasClass("sorting")){
sortArray.push([index,'asc']);
}
if ($(this).hasClass("sorting_asc")){
sortArray.push([index,'desc']);
}
} else{
if ($(this).hasClass("sorting_asc")){
sortArray.push([index,'asc']);
}
if ($(this).hasClass("sorting_desc")){
sortArray.push([index,'desc']);
}
}
});
currentTable.fnSort(sortArray);
});
注意:仅在数据表初始化后使用脚本。