我的ProviderQualificationTime
字段中包含字符串数据。因此,由于数据为string
,因此无法对此列进行正确排序。如何让datatable
将其视为Int
列并按此排序?
可能?
ProviderQualificationTime
字段中的示例数据:
“1”, “10”, “11”, “NotAccpeted”
代码:
$('#tblProviders').dataTable({
"autoWidth": false,
"searching": false,
"pageLength": 6,
"lengthMenu": [6, 10, 25, 50, 75, 100],
"bDestroy": true,
data: obj.data.ProviderQualificationDetails,
columns: [
{ "data": "ProviderName" },
{ "data": "ProviderQualificationTime" },
{ "data": "TotalServiceableOffers" }
]
});
答案 0 :(得分:1)
我会使用columnDef对象来指定渲染函数,如下所示:
$('#tblProviders').dataTable({
"autoWidth": false,
"searching": false,
"pageLength": 6,
"lengthMenu": [6, 10, 25, 50, 75, 100],
"bDestroy": true,
data: obj.data.ProviderQualificationDetails,
columns: [
{ "data": "ProviderName" },
{ "data": "ProviderQualificationTime" },
{ "data": "TotalServiceableOffers" }
],
"columnDefs": [ {
"targets": 1,
"render": function ( data, type, full, meta ) {
// If this is a display render request ...
if(type === 'display') {
// don't modify it.
return data;
}
// Either convert it to a number if it is a numeric value or set it to 0
// This will return a numeric value for sorting and filtering.
return (isNaN(data)) ? 0 : +data;
}
}]
});
因此,使用列的自定义渲染器,您可以拥有未修改的显示值和转换的排序/过滤器值。
答案 1 :(得分:0)
使用HTML5数据属性,您可以指定数据顺序。这将允许数据表以与实际显示的数据不同的方式对内容进行排序:
https://datatables.net/examples/advanced_init/html5-data-attributes.html
例如:
<td data-order='0'>NotAccepted</td>
答案 2 :(得分:0)
这很丑陋但有效:
$(document).ready(function() {
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"numNonStandard-asc": function (a, b) {
var x = isNaN(parseInt(a, 10)) ? 0 : parseInt(a, 10);
var y = isNaN(parseInt(b, 10)) ? 0 : parseInt(b, 10);
return (x == y) ? 0 : (x < y) ? 1 : -1;
},
"numNonStandard-desc": function (a, b) {
var x = isNaN(parseInt(a, 10)) ? 0 : parseInt(a, 10);
var y = isNaN(parseInt(b, 10)) ? 0 : parseInt(b, 10);
return (x == y) ? 0 : (x < y) ? -1 : 1;
}
});
$('.table-data').DataTable({
columnDefs: [
{ type: 'numNonStandard', targets: -1 }
]
});
});
工作example。
答案 3 :(得分:0)
只需添加以下给定参数:
"sType": "string"
有关详情,请访问[https://datatables.net/forums/discussion/24284/column-sort-wrong-data-always-string]
链接答案 4 :(得分:0)
请参阅https://datatables.net/plug-ins/sorting/signed-num
,并且在返回的第一个IF条件中(a ==“-” || a ===“”)? 0:a.replace('+','')* 1; 再添加一个或类似(a ==“-” || a ===“” || a ==“ NotAccpeted” )? 0:a.replace('+','')* 1;