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 に答える