我已经查找了我的问题的答案,例如Datatables sorting time column或Custom 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>
答案 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>