2013-03-13 97 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": "." 
     } 
    }); 
}); 
相关问题