在jquery DataTable中将字符串数据排序为Int

时间:2016-11-16 13:43:10

标签: jquery sorting datatables columnsorting

我的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" }
                            ]
                        });

5 个答案:

答案 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;