自定义排序功能在JQuery Datatable中像" anti-the"

时间:2016-03-11 11:20:47

标签: datatables datatables-1.10

我想为Jquery Datatable创建自定义排序函数,如

  

抗的

我有一个专栏,其中学生的全名与他们的敬意相同,例如。 Mr. Fname Mname Lname

虽然排序它应该忽略第一个先生|太太|女士。并应根据Fname中的剩余数据进行排序

我尝试了这个,但它不起作用

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
  "anti-the-pre": function(a) {
    return a.replace(/^mrs\.|^mr\.|^ms\. /i, "");
  },
  "anti-the-asc": function(a, b) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
  },
  "anti-the-desc": function(a, b) {
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
  }
});

$.ajax({
  url: '/DataService.asmx/getData',
  method: 'post',
  dataType: 'json',
  success: function(data) {
    var t = $('#studentDataTable').DataTable({
        data: data,
        "columnDefs": [{
          type: 'anti-the',
          targets: 0
        }],
      }
    });
});
  

这是Jsfiddle Example。   谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

问题是您在更换后有一个前导空白。您最终会在' Hardik Vinod Thaker'而非'Hardik Vinod Thaker'

上排序
return a.replace(/^mrs\.|^mr\.|^ms\. /i, "").trim();

一个正则表达式的人可能会将空白包含为单词边界\b。但是你没有义务使用自定义排序,你可以在你已经使用的render函数中完成所有操作:

render: function(data,type,row) {
   var concatName = data['fname']+' '+data['mname']+' '+data['lname']
   return type == 'sort' 
      ? concatName.replace(/^mrs\.|^mr\.|^ms\. /i, "").trim()
      : concatName
}

当dataTables想要列的值进行排序时,则传递连接的名称而不使用敬语。演示 - &gt;的 https://jsfiddle.net/hn8v9hqx/