2013-08-07 57 views
0

我有一個jquery datatable,它被初始化並使用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,因爲我不想與控制器和模型混亂做到這一點。

+0

您是否嘗試過在你的數據表中的東西把這樣'「aaSorting」 :[[2,「desc」]]? –

+1

當我們無法重現場景時,不能生成答案。當您點擊「複雜排序」按鈕時,您必須弄清楚如何在隱藏字段上操作祕密單位價格的私人交易。 – davidkonrad

+0

@davidkonrad感謝您指出這一點。它讓我解決了我的問題。 – Crystark

回答

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']]); 
相關問題