【问题标题】:Sort string data as Int in jquery DataTable在jquery DataTable中将字符串数据排序为Int
【发布时间】:2016-11-16 13:43:09
【问题描述】:

我的ProviderQualificationTime 字段中有字符串数据。因此,由于数据是string,因此无法正确排序此列。如何使datatable 将其视为Int 列并根据该列进行排序? 可能的? ProviderQualificationTime 字段中的示例数据:

“1”、“10”、“11”、“未接受”

代码:

$('#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" }
                            ]
                        });

【问题讨论】:

  • data : obj.data.ProviderQualificationDetails.map(Number),
  • @adeneo 它不会将整个ProviderQualificationDetails 对象转换为数字吗?我只希望ProviderQualificationTime 是数字类型。
  • 那么我想你必须弄清楚如何映射它并只将你想要的索引转换为数字
  • 另外ProviderQualificationDetails是一个数组

标签: jquery sorting datatables columnsorting


【解决方案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;
    }
 }]
});

因此,使用列的自定义渲染器,您可以获得未修改的显示值和转换后的排序/过滤值。

【讨论】:

    【解决方案2】:

    使用 HTML5 数据属性,您可以指定数据顺序。这将允许数据表对内容进行不同于实际显示的数据的排序:
    https://datatables.net/examples/advanced_init/html5-data-attributes.html

    例如:

    <td data-order='0'>NotAccepted</td>
    

    【讨论】:

      【解决方案3】:

      这很难看,但有效:

      $(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

      【讨论】:

        【解决方案4】:

        只需添加以下参数:

        "sType": "string"

        更多详情请访问链接 [https://datatables.net/forums/discussion/24284/column-sort-wrong-data-always-string]

        【讨论】:

          【解决方案5】:

          请参考https://datatables.net/plug-ins/sorting/signed-num

          并且在 return (a=="-" || a==="") 的第一个 IF 条件中? 0 : a.replace('+','')*1; 再添加一个或条件如 (a == "-" || a === "" || a == "不接受”) ? 0 : a.replace('+', '') * 1;

          【讨论】:

            猜你喜欢
            • 2010-11-13
            • 2017-01-06
            • 2011-11-26
            • 1970-01-01
            • 2017-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-20
            相关资源
            最近更新 更多