我需要在帐户事务处理表上设置多列排序。我决定使用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 *排序。强制使用辅助键可以防止这种情况发生。 –