在JavaScript中,只有點才能作爲小數分隔符有效。由於DataTables使用JavaScript對列值進行排序,因此它將使用逗號分隔符作爲字符串來考慮數字。但是,這個問題很容易被排序插件取代。
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"numeric-comma-pre": function (a) {
// prepare number
a = +(a.replace(",", "."));
a = (isNaN(a)) ? Number.MAX_VALUE : a;
return a;
},
"numeric-comma-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"numeric-comma-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
前面的代碼塊定義一個新的數據類型,要由數據表被用來列進行排序。此代碼是可以在DataTables official site中找到的示例的改編版本。
插件對象中的第一個函數是將單元格值轉換爲數字的函數,以便它可以通過以下函數進行排序。在這種情況下,我遵循this post的建議,並使用一元運算符將值轉換爲數字。如果該值不是數字,則返回NaN,並將其更改爲Number.MAX_VALUE。我這樣做是因爲我選擇在排序升序時最後移動無效數字。
之後,只剩下創建數據表,併爲我們想要的列定義新的數據類型。
jQuery("#myTable").dataTable({
"aoColumnDefs": [
{ "sType": "numeric-comma", "aTargets": [2,3] }
]
});
假設第三和第四列有逗號分隔的數字,他們現在必須正確排序。
那是PHP,JavaScript還是其他的代碼? – 2013-03-13 13:47:01
我有一個頭痛這也和最終使用的數據未格式化的數字,然後mRender對其進行格式化自己。 – 2013-03-13 13:47:10
我的問題是進入列「克拉」... – 2013-03-13 13:51:06