我需要在帳戶事務處理表上設置多列排序。我決定使用jQuery DataTables。每當我點擊一個列標題對該列進行排序(比如列x)時,我希望它按列3對列x中的任何匹配進行排序。如果我點擊第3列,那麼當列3中有匹配項時,它應該按第0列排序。默認次級排序
我見過fnSortListener和fnSort,看起來我可以通過將這些附加到每列來實現我的目標。 。但似乎真是多餘,因爲每一列需要做的輔助排序列上3,除3列
那麼,有沒有一種方法來告訴數據表總是在第3欄做了二次排序,然後指定第3列的例外情況?
任何幫助表示讚賞。我對這個插件很陌生。謝謝!
編輯
這裏是我結束了去。第一個二維數組指示如何對第一次點擊進行排序,第二個二維數組指示如何對第二次點擊進行排序。
var Sorter = function($dataTable) {
return {
bindMultiSort: function(headerSelector, firstOrderTuples, secondOrderTuples) {
var order = 0;
this.removeSorting(headerSelector).click(function() {
if (order === 0) {
$dataTable.fnSort(firstOrderTuples);
order = 1;
} else {
$dataTable.fnSort(secondOrderTuples);
order = 0;
}
});
},
removeSorting: function(headerSelector) {
var $header = $(headerSelector);
$header.unbind('click');
return $header;
}
};
};
function attachSecondarySorting($transactionsTable) {
var sorter = new Sorter($transactionsTable);
sorter.bindMultiSort('#posted', [[POSTED_DATE_COL, "asc"], [DESCRIPTION_COL, "asc"]], [[POSTED_DATE_COL, "desc"], [DESCRIPTION_COL, "asc"]]);
sorter.bindMultiSort('#received', [[RECEIVED_DATE_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[RECEIVED_DATE_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
sorter.bindMultiSort('#category', [[TRANSACTION_TYPE_COL, 'asc'], [POSTED_DATE_COL, 'desc'], [DESCRIPTION_COL, 'asc']], [[TRANSACTION_TYPE_COL, 'desc'],
sorter.bindMultiSort('#description', [[DESCRIPTION_COL, 'asc'], [POSTED_DATE_COL, 'desc']], [[DESCRIPTION_COL, 'desc'], [POSTED_DATE_COL, 'desc']]);
sorter.bindMultiSort('#moneyIn', [[MONEY_IN_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[MONEY_IN_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
sorter.bindMultiSort('#moneyOut', [[MONEY_OUT_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[MONEY_OUT_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
}
你能澄清你是什麼意思時,你說你要一列那裏有另一列比賽進行排序?以及點擊列中沒有匹配項時數據會發生什麼? – jimmym715
或者你只是說,單擊列x將先按列x然後按列3排序,除了按列3排序然後按列0排序的列3? – jimmym715
另一種方法是讓用戶控制二次排序。如果他們點擊兩個不同的列,第一個將是次要的,第二個將是主要的 - 只要您使用* stable *排序。強制使用輔助鍵可以防止這種情況發生。 –