使用 jQuery 数据表自定义排序持续时间
Custom sort durations using jQuery DataTables
我需要对 jQuery DataTables 中的列进行排序。我尝试使用 moment 插件但没有成功。
该列包含通话时长,但它并不总是存在,因此我们对这些使用 N/A
。列数据如下所示:
2m 45s
1m 32s
N/A
45s
1m
我需要能够用 N/A
值小于 0
的值对这些进行排序,其余的按逻辑顺序排列
我使用 jQuery DataTables 1.10.6,moment 2.9.0,我确实拥有所有数据tables 插件。我在我的table的header中使用data-stype
是th
。我也使用无配置数据table init 看起来像那样
// Create DataTables User
table = $('#summary-table').DataTable({
'language' : { "url": paths.lang_{{LaravelLocalization::getCurrentLocale()}} },
'responsive':
{
'details':
{
'type': 'inline'
}
},
'order': [[(nbCat + 5), 'desc']],
'dom': '<"row"<"col-sm-12 before-table
"<"table_controls">>r><"row"<"col-sm-12"t>><"row"<"col-sm-12"ipl>>',
'lengthMenu': [[20, 50, 100, -1], [20, 50, 100, transAll]],
});
解决方案
使用下面的代码:
jQuery.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+)m)?\s*(?:(\d+)s)?/);
duration = parseInt(d[1] ? d[1] : 0) * 60 + parseInt(d[2] ? d[2] : 0);
}
return duration;
}
});
$(document).ready(function (){
var table = $('#summary-table').DataTable({
columnDefs: [
{ targets: 0, type: 'duration' }
]
});
});
将 targets: 0
中的 0
更改为包含持续时间的列的索引。为了简单起见,我省略了其他 table 选项。
演示
有关代码和演示,请参阅 this jsFiddle。
我需要对 jQuery DataTables 中的列进行排序。我尝试使用 moment 插件但没有成功。
该列包含通话时长,但它并不总是存在,因此我们对这些使用 N/A
。列数据如下所示:
2m 45s
1m 32s
N/A
45s
1m
我需要能够用 N/A
值小于 0
的值对这些进行排序,其余的按逻辑顺序排列
我使用 jQuery DataTables 1.10.6,moment 2.9.0,我确实拥有所有数据tables 插件。我在我的table的header中使用data-stype
是th
。我也使用无配置数据table init 看起来像那样
// Create DataTables User
table = $('#summary-table').DataTable({
'language' : { "url": paths.lang_{{LaravelLocalization::getCurrentLocale()}} },
'responsive':
{
'details':
{
'type': 'inline'
}
},
'order': [[(nbCat + 5), 'desc']],
'dom': '<"row"<"col-sm-12 before-table
"<"table_controls">>r><"row"<"col-sm-12"t>><"row"<"col-sm-12"ipl>>',
'lengthMenu': [[20, 50, 100, -1], [20, 50, 100, transAll]],
});
解决方案
使用下面的代码:
jQuery.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+)m)?\s*(?:(\d+)s)?/);
duration = parseInt(d[1] ? d[1] : 0) * 60 + parseInt(d[2] ? d[2] : 0);
}
return duration;
}
});
$(document).ready(function (){
var table = $('#summary-table').DataTable({
columnDefs: [
{ targets: 0, type: 'duration' }
]
});
});
将 targets: 0
中的 0
更改为包含持续时间的列的索引。为了简单起见,我省略了其他 table 选项。
演示
有关代码和演示,请参阅 this jsFiddle。