逗号和$ in datatable列

use*_*952 5 javascript csv jquery currency datatables

我有一个数据表,有4列保持货币.目前我将它们视为普通列,并手动将'$'附加到每个值.现在我需要将列格式化为逗号.有没有插件可以做到这一点?我还想删除'$'值的手动添加.我查了几个网站,但我真的不明白它们是如何工作的.

Gre*_*tit 9

[更新使用DataTables 1.9+的答案,并尊重rynop的更好答案.原始答案保留在横向规则之下,但它既过时又效率低于应有的水平.

由于它实际上是您要修改的数据,而不是整个单元格,因此您应该使用列定义中的"render"属性.要生成干净的代码,您可以将实际的修改方法存储在其他地方,然后调用它:

var myTable = $('#mytable').DataTable({
  ...
  "columns": [
    { 
      "data" : "key_of_column",
      "render" : function( data, type, full ) {
        // you could prepend a dollar sign before returning, or do it
        // in the formatNumber method itself
        return formatNumber(data);                          
      }
    }
  ]
  ...
});

// elsewhere... probably more likely in a utility namespace or module
function formatNumber(n) {
  return n.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
}
Run Code Online (Sandbox Code Playgroud)

formatNumber 使用这个接受的答案的正则表达式:

每隔三位数字为数字添加逗号


[原始答案]

我不会自己为每个单元添加美元值,这个决定具有降低您需要执行的复杂性的副作用.;-)在任何电子表格或货币值表中,您只需将货币符号放在标题或第一行中.将它放在标题中会使您的生活更轻松,将它放在第一行实际上会增加您的问题的复杂性.

所以,回到DataTables本身,你有多种方法可以为这只猫提供皮肤,但这里有两种:

  1. 使用逗号(即默认的DataTables行为)渲染整个表,但使用sClass参数向这些特定单元格添加类.然后使用fnDrawCallback触发逗号创建函数,如上面的链接所述.

  2. 仅使用上述链接中的正则表达式在数据进入时修改单元格.

像这样的东西(其中3是你正在修改的零索引列):

"aoColumnDefs": [ {
   "aTargets": [3],
   "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
     var $currencyCell = $(nTd);
     var commaValue = $currencyCell.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
     $currencyCell.text(commaValue);
   }
}]
Run Code Online (Sandbox Code Playgroud)

(aoColumnDefs是传递给你的初始化对象的一部分dataTable());

如果你绝对必须添加美元符号,你只需在功能之前将它添加到同一个text函数中.


ryn*_*nop 6

我会在'aoColumns'中使用'mRender'方法.它更清洁,可能比目前接受的解决方案更有效.

例:

oTable = $('#mytable').dataTable( {
...
  "aoColumns": [
    { 
      "sTitle": "MyCol With Number",
       "mRender": function( data, type, full ) {
           return formatNumber(data);                                       
       },                                   
...
Run Code Online (Sandbox Code Playgroud)

其中formatNumber的定义如下:

function formatNumber(n) {
    return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
Run Code Online (Sandbox Code Playgroud)

使用fnRender还可以让您完全控制单元格 - 例如,如果您想用一些HTML包装数据.

有关完整规格,请参见http://www.datatables.net/usage/columns#mRender