【问题标题】:Sorting a jquery datatable based on a calcul between two columns根据两列之间的计算对jquery数据表进行排序
【发布时间】:2013-08-07 08:57:03
【问题描述】:

我有一个jquery datatable,它是使用 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 来做这件事,因为我不想弄乱控制器和模型。

【问题讨论】:

  • 您是否尝试过在数据表中放入类似 "aaSorting": [[ 2, "desc" ]] 的内容?
  • 当我们无法重现场景时,不可能给出答案。当你点击“复杂排序”按钮时,你必须弄清楚如何制作一个自定义排序datatables.net/development/sorting#data_source,它对隐藏字段上的秘密单价进行操作。
  • @davidkonrad 感谢您指出这一点。它让我解决了我的问题。

标签: javascript jquery sorting datatables


【解决方案1】:

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

$.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']]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2019-03-04
    • 2017-12-06
    相关资源
    最近更新 更多