【问题标题】:Custom Sorting Function In JQuery Datatable like "anti-the"JQuery Datatable中的自定义排序功能,如“反之”
【发布时间】:2016-03-11 11:20:46
【问题描述】:

我想为 Jquery 数据表创建自定义排序功能,例如

反之

我有一个专栏,其中有学生的全名以及他们的敬语,例如。 Mr. Fname Mname Lname.

排序时它应该忽略第一个 Mr.|Mrs.|Ms。并应根据 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。 有人知道怎么做吗?

【问题讨论】:

    标签: datatables datatables-1.10


    【解决方案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 想要一个列的值进行排序时,然后传递不带敬语的串联名称。演示 -> https://jsfiddle.net/hn8v9hqx/

    【讨论】:

    • 哎呀..!非常感谢您先生..感谢您的解释:)
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多