使用jquery数据表对长持续时间进行排序

时间:2016-10-27 13:04:02

标签: jquery sorting datatable

我已经查找了我的问题的答案,例如Datatables sorting time columnCustom sort durations using jQuery DataTables,但我找不到适合我问题的答案。因此,我在这里。

我正在使用jquery Datables:https://datatables.net/来显示当前项目中的表。我得到的表格的列包含持续时间,例如:

99:39:25    
322:48:43
274:01:21
33:10:39

当我想对它们进行排序时,结果不正确:

99:39:25
33:10:39
322:48:43
274:01:21

我在文档中查找了排序插件(https://datatables.net/plug-ins/sorting/),但它没有帮助。我使用自然时间排序,每次都得到上面的结果。有没有人知道如何继续?

这是我用来初始化HTML中的数据表:

<script>
$(document).ready(function() {
 $('.dataresults').DataTable({
   "iDisplayLength": 25,
   "searching": true,
   "pagingType": "simple",
   "order": [[7, "desc"]],
   "columnDefs": [{
     "type": 'time', "targets": [6,7]
   }],
 });
});
</script>

1 个答案:

答案 0 :(得分:0)

我找到了基于Custom sort durations using jQuery DataTables的解决方案。我发布解决方案,如果有人在我的情况下。

我替换了这个正则表达式:

/(?:(\d+)m)?\s*(?:(\d+)s)?/

这一个:

/(?:(\d+):)?(?:(\d+):)?(?:(\d+):)?/

它按预期排序!

322:48:43
274:01:21
99:39:25
33:10:39

完整的脚本变为:

<script type="text/javascript">
$.extend(jQuery.fn.dataTableExt.oSort, {
"duration-pre": function (s) {        
    var duration;      
    s = s.toLowerCase();
    if(s === 'n/a'){ 
        duration = -1;           
    } else {            
        d = s.match(/(?:(\d+):)?(?:(\d+):)?(?:(\d+):)?/);
        duration = parseInt(d[1] ? d[1] : 0) * 60 + parseInt(d[2] ? d[2] : 0) + parseInt(d[2] ? d[2] : 0) / 60;
    }
    return duration;
}
});

$(document).ready(function() {
$('.dataresults').DataTable({
  "iDisplayLength": 25,
  "searching": true,
  "pagingType": "simple",
  "order": [[7, "desc"]],
  "columnDefs": [{
    "type": 'duration', targets: [6,7]
  }],
});
});
</script>