DataTables-使用CHROME时无效的SORT结果

时间:2018-08-18 17:35:18

标签: javascript sorting datatable datatables

嗨,

我正在使用数据表,并注意到在使用自定义排序功能时Chrome上的行为非常奇怪。

这是我的发现:

  • 在处理小型列表(少于10个)时,自定义排序在chrome和Firefox中效果很好
  • 当使用稍大的表(仍然很小,大约有30个条目)时,Firefox仍会返回有效的排序结果,但Chrome无法做到这一点。

我做了一个小提琴,您可以在其中看到其行为。在您的内部,您会看到两个相同的表,只是它们的数据大小不同,第一个很小-不管是Chrome还是Firefox,一切正常。

第二个更大,Chrome无法对其进行排序。

小提琴: https://jsfiddle.net/ogoossens/d35cb4eh/3/

我的代码部分

自定义排序功能:

jQuery.fn.dataTableExt.oSort["customSort-desc"] = function (x, y) {
    return formatPrice(x) < formatPrice(y);
};
jQuery.fn.dataTableExt.oSort["customSort-asc"] = function (x, y) {
    return formatPrice(x) > formatPrice(y);
};

我如何清理数字格式

function formatPrice(unformattedPrice) {

    // For debugging purposes
    let returnValue = unformattedPrice;

    // Here I check if there is "-" if so teh price shall be considered as 0
    if (unformattedPrice == "-") {
        returnValue = 0;
    } else {

        // If not lets get rid of EVERYTHING except the numbers
        returnValue = returnValue.replace(" ","");
        returnValue = returnValue.replace("$","");
    }

    // Lets make sure itll be considered float
    returnValue = parseFloat(returnValue);

    return returnValue;
}

我如何定义表格:

    $('#example-ok').DataTable({
    "paging": false,
    "searching": false,
    "info": false,
    order: [],
    "columns": [
        {
            "bSortable": true,
            "sType": "customSort"
        },
    ]
});

尝试在Firefox和Chrome中打开完整的小提琴,并告诉我第二张桌子在哪儿排序。

谢谢

1 个答案:

答案 0 :(得分:2)

问题是要排序的数组具有相等的值,当具有相等的值时,应使用类似以下内容的方法:

az account show --query "{subscriptionId:id, tenantId:tenantId}"

此处的完整示例:https://jsfiddle.net/15qdx4g9/1/

使用jQuery.fn.dataTableExt.oSort["customSort-desc"] = function (x, y) { if(formatPrice(x) == formatPrice(y)){ return 0; } if(formatPrice(x) < formatPrice(y)){ return 1 } if(formatPrice(x) > formatPrice(y)){ return -1 } }; 时的行为相同。老实说,我不知道为什么Chrome和Firefox之间会有区别,我猜这是因为.sort()

的不同实现