0

我有一个使用 ajax 初始化和填充的jquery数据表。我在左侧有一个带有各种“复杂”排序选项的菜单。

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

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 中执行此操作,因为我不想弄乱控制器和模型。

4

1 回答 1

0

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

$.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;

    } );
};

现在我保持单位列位于索引 1 的事实,但可以使用一个类来保持这种动态。

然后在数据表中初始化:

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

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

theTable.dataTable().fnSort([[5,'asc']]);
于 2013-08-08T08:54:03.450 回答