2

很棒的数据表插件 (datatables.net) 能够通过在单击标题时按住 shift 来进行多列排序。

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

4

2 回答 2

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 ),只需 make 它if(true),或注释掉 if。

于 2013-06-10T23:12:35.620 回答
1

这是一个解决方案。(使用数据表版本 1.10.12 测试)

您必须取消绑定单击事件并手动重新创建排序功能。

首先,在数据表中添加一个类:

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

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

于 2017-03-22T16:19:52.117 回答