2013-03-13 95 views
0

我使用jQuery數據表與server_processing。 這提醒我在數據表中使用','分隔符對數字表進行server_processing數字表格 。datatables ...排序不適用於數字逗號...爲什麼?

$ inter = trim ($ aRow ['carat']); 
$ row [] = number_format ($ inter, 2, ',', ''); 

當我點擊箭頭上升和下降, 排序不會在數量方法進行,但該方法的文本。 ex。 10.01> 9.99(數字)

如何讓它與我的號碼一起工作?

+1

那是PHP,JavaScript還是其他的代碼? – 2013-03-13 13:47:01

+1

我有一個頭痛這也和最終使用的數據未格式化的數字,然後mRender對其進行格式化自己。 – 2013-03-13 13:47:10

+0

我的問題是進入列「克拉」... – 2013-03-13 13:51:06

回答

2

在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] } 
    ] 
}); 

假設第三和第四列有逗號分隔的數字,他們現在必須正確排序。

+0

我只是把這些「sType」 – 2013-03-13 14:07:19

+0

這不起作用 – 2013-03-13 14:07:58

+0

我添加了「sType」:「數字逗號」 – 2013-03-13 14:08:39

0

如果你正在做數據表的服務器端處理的實現,您不能使用任何類型的插件或S型的變量,因爲它們都位於客戶端

您將需要更新您的數據庫查詢正確排序列一個數字/字符串,然後使用mRender或javascript來更新列格式,這樣的排序真的有特別注意與列格式

例如:返回作爲數據庫中的數字貨幣,然後使用mRender添加逗號/貨幣種類

2

我試過了datatables p的例子年齡。它對我很好。

的數據應該是十進制格式

https://datatables.net/examples/plug-ins/sorting_sType.html

$(document).ready(function() { 

    jQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a, b) { 
     var x = (a == "-") ? 0 : a.replace(/,/, "."); 
     var y = (b == "-") ? 0 : b.replace(/,/, "."); 
     x = parseFloat(x); 
     y = parseFloat(y); 
     return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
    }; 

    jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a, b) { 
     var x = (a == "-") ? 0 : a.replace(/,/, "."); 
     var y = (b == "-") ? 0 : b.replace(/,/, "."); 
     x = parseFloat(x); 
     y = parseFloat(y); 
     return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
    }; 

    oTable = $('#grid').dataTable({ 
     "bJQueryUI": true, 
     "sPaginationType": "full_numbers", 
     "aoColumns": [ 
      null, 
      null, 
      null, { 
       "sType": "numeric-comma" 
      }, 
      null, 
      null 
     ] 
    }); 
}); 
+0

Il的作品。感謝你 – 2014-06-26 06:51:16

+0

@ Jean-YvesDeman - 如果這是一個很好的答案,你可以將其標記爲已接受。 – davidkonrad 2014-11-28 12:21:17

0

最新的數據表的版本(1.10.4)處理格式化的數字排序沒有任何擴展,也就是說,使按降序排序時$1,000.00之前$900.00在升序排序時將$900.00放在$1,000.00之前。

請參閱num-fmthttp://datatables.net/reference/option/columns.type

0

試着在你的頭上插入下面的代碼。請記住爲您的數據表名更改「示例」 。

$(document).ready(function() { 
    $('#example').DataTable({ 
     "language": { 
      "decimal": ",", 
      "thousands": "." 
     } 
    }); 
}); 
相關問題