jQuery DataTables多排序无需移位

时间:2013-06-06 20:08:16

标签: jquery datatables

令人敬畏的datatables插件(datatables.net)能够通过在单击标题时保持移位来进行多列排序。

有没有办法在没有按住shift修饰符的情况下启用它?我完全不知所措:(

2 个答案:

答案 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);
});

注意:仅在数据表初始化后使用脚本。