似乎渲染功能会损害DataTable对我的一个列的排序功能。此列包含所谓的“语料库排名”。语料库排名都是整数,但出于界面目的,我写了一个渲染函数来检测语料库排名何时超过4000.如果是这样,那么我有渲染功能将语料库排名条目更改为罕见的字符串。 / p>
这是因为当有人点击列的标题以尝试按语料库排名对其进行排序时,语料库排名被视为字符串而不是整数。如果我删除了渲染功能然后该列实际上被排序为整数而不是字符串。
columns.push({
"name": $(this).data("fieldname"),
"data": "fields."+$(this).data("fieldname"),
/*"render": function( data, type, full, meta) {
if (data > 4000) {
return "rare";
} else {
return data;
}
},*/
"visible": $(this).data("visible"),
我知道DataTables通常使用其中的数据类型对列进行排序......但这是一个包含整数和字符串的列。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
你能添加另一列isRare吗?并且对于4000以下的所有等级保持0,对于4000以上的所有等级保持1?除非你有其他不允许你拥有这样一栏的限制,否则应该这样做。
答案 1 :(得分:0)
您可以将其用于排序html5-data-attributes和columns.createdCell。
下面是代码示例。我是根据你上面的代码创建的:
"data": "fields."+$(this).data("fieldname"),
"render": function( data, type, full, meta) {
if (data > 4000) {
return "rare";
} else {
return data;
}
},
"createdCell": function (td, cellData, rowData, row, col) {
$(td).attr('data-order', cellData);
}
答案 2 :(得分:0)
我过去使用的一个选项(但可能不是当前最受欢迎的方法)是使用ref标记将单元格内容包装在一个span中,并添加一个比较ref值的自定义排序类型: / p>
$.fn.dataTableExt.oSort['ref-numeric-asc'] = function (a, b) {
var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
x = parseFloat(x);
y = parseFloat(y);
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
$.fn.dataTableExt.oSort['ref-numeric-desc'] = function (a, b) {
var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
x = parseFloat(x);
y = parseFloat(y);
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
然后,您可以指定“ref-numeric”作为该列的排序类型。