我想为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。 谁知道怎么做?
答案 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/ 强>