我正在使用DataTables并尝试在排序时忽略基于MomentJs的日期列上的空值。
例如:08 Nov 2016 09:47 pm
http://codepen.io/anon/pen/qqbWVa?editors=1010
目前我有这个,它按预期对值进行排序,但它也包含空单元格。
$.fn.dataTable.moment('DD MMM YYYY hh:mm a');
$('.table-data').DataTable();
我尝试了以下自定义排序方法,该方法最初发布在https://datatables.net/forums/discussion/1178/sorting-dates-handling-null-values
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
'date-asc': function (a, b) {
var x = Date.parse(a);
var y = Date.parse(b);
if (x == y) { return 0; }
if (isNaN(x) || x < y) { return 1; }
if (isNaN(y) || x > y) { return -1; }
},
'date-desc': function (a, b) {
var x = Date.parse(a);
var y = Date.parse(b);
if (x == y) { return 0; }
if (isNaN(y) || x < y) { return -1; }
if (isNaN(x) || x > y) { return 1; }
}
});
$('.table-data').DataTable({
columnDefs: [
{ type: 'date', targets: -1 }
]
});
但似乎没什么区别。如果你能解决这个问题我真的很感激。
更新 我想将空值的行移到最后一行,这样它就不会在第一个位置显示出来。像这样的东西 http://jsfiddle.net/dnsL2oc4/2/
答案 0 :(得分:2)
请改为尝试:
$(document).ready(function() {
//$.fn.dataTable.moment('DD MMM YYYY hh:mm a');
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
'dateNonStandard-asc': function (a, b) {
var x = Date.parse(a);
var y = Date.parse(b);
if (x == y) { return 0; }
if (isNaN(x) || x < y) { return 1; }
if (isNaN(y) || x > y) { return -1; }
},
'dateNonStandard-desc': function (a, b) {
var x = Date.parse(a);
var y = Date.parse(b);
if (x == y) { return 0; }
if (isNaN(y) || x < y) { return -1; }
if (isNaN(x) || x > y) { return 1; }
}
});
$('.table-data').DataTable({
columnDefs: [
{ type: 'dateNonStandard', targets: -1 }
]
});
});
如果你做一些非标准的排序,最好清楚一点; - )
它似乎做你想要的,我认为你的逻辑是合理的,但使用时刻是过度的。您可能需要对它进行更多测试,但是......