DataTables - 排序时忽略空时刻日期值

时间:2016-11-10 11:02:49

标签: javascript html datatables

我正在使用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/

1 个答案:

答案 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 }
    ]
  });
});

如果你做一些非标准的排序,最好清楚一点; - )

它似乎做你想要的,我认为你的逻辑是合理的,但使用时刻是过度的。您可能需要对它进行更多测试,但是......