【问题标题】:Simple custom sorting function for jQuery DataTablesjQuery DataTables 的简单自定义排序功能
【发布时间】:2017-11-14 17:00:44
【问题描述】:

数字排序不适用于我的数据集。所以我做了一个自定义排序,将整个字符串转换为数字,然后根据它进行排序,但由于某些原因它不起作用。我在这里错过了什么?

$.fn.dataTableExt.oSort["test-desc"] = function (x, y)
{

         x = parseInt(x);
        y = parseInt(y);

        if ( x < y)
        {
            return 1;
        }

        return 0;


};

$.fn.dataTableExt.oSort["test-asc"] = function (x, y)
{

    x = parseInt(x);
    y = parseInt(y);

    if ( x > y)
    {
        return 1;
    }

    return 0;

}

$('table').DataTable({
    "pageLength": 300,
    "bLengthChange": false,
    "columnDefs": [
    { "type": "test", targets: 3 }
    ]
});

升序和降序都不能正常工作。我检查了这些函数是否被调用并正确地将字符串转换为数字实例。

【问题讨论】:

  • 对于我在图像上看到的内容,您正在将字符串解析为数字(字符串到 int),其中包括“A | % :”?
  • 是的,单元格中的任何内容都会被解析。其中也包括 div 标签。

标签: jquery sorting datatables


【解决方案1】:

jQuery DataTable 排序函数不返回 1 和 0。而是返回 1 和 -1。所以修改排序功能让它们完美运行。

    $.fn.dataTableExt.oSort["test-desc"] = function (x, y)
    {

        x = parseInt(x);
        y = parseInt(y);

        if ( x > y)
        {
            return -1;
        }

        return 1;

    };

    $.fn.dataTableExt.oSort["test-asc"] = function (x, y)
    {

        x = parseInt(x);
        y = parseInt(y);

        if ( x > y)
        {
            return 1;
        }

        return -1;
    }

【讨论】:

    【解决方案2】:

    jQuery DataTable 排序函数看起来不是 0 或 1,也不是 1 或 -1。它寻找正值或负值。所以你可以这样做:

    $.fn.dataTableExt.oSort["test-desc"] = function (x, y) {
        x = parseInt(x);
        y = parseInt(y);
        return y - x;
    };
    
    $.fn.dataTableExt.oSort["test-asc"] = function (x, y) {
        x = parseInt(x);
        y = parseInt(y);
        return x - y;
    };
    

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多