基于两列之间的计算对jquery数据表进行排序

Sorting a jquery datatable based on a calcul between two columns

本文关键字:数据表 排序 jquery 于两列 之间 计算      更新时间:2023-09-26

我有一个jquery数据表,它是使用ajax初始化和填充的。我左边有一个菜单,里面有各种"复杂"的排序选项。

我的数据表包含总价以及售出的单位数量。我没有也不能添加"单价"列,但我仍然希望我的菜单项"按单价排序"按预期工作,这意味着如果我有下表:

Name    Units    Price
----------------------
James   1        10
Eric    2        19
Greg    10       110
James   5        45

我点击这个按钮,我希望它像这样排序:

Name    Units    Price
----------------------
James   5        45
Eric    2        19
James   1        10
Greg    10       110

我想纯粹用javascript来做这件事,因为我不想扰乱控制器和模型。

我使用以下方法做到了这一点:

$.fn.dataTableExt.afnSortData['unit-price'] = function  ( oSettings, iColumn ) {
    return $.map( oSettings.oApi._fnGetTrNodes(oSettings), function (tr, i) {
        var price = parseInt($('td:eq('+iColumn+')', tr).text());
        if(isNaN(price)) return 0;
        var units = parseInt($('td:eq(1)', tr).text());
        if(isNaN(units)) return 0;
        var result = Math.round(1000*price/units);
        return result;
    } );
};

目前,我保留了units列位于索引1的事实,但可以使用一个类来保持这种动态。

然后在数据表中初始化:

theTable.dataTable({
    ...
    "aoColumns": [
        null,
        null,
        null,
        null,
        null,
        { "sSortDataType": "unit-price" }
    ]
});

我现在可以使用外部按钮进行排序:

theTable.dataTable().fnSort([[5,'asc']]);