1

我使用带有 server_processing 的 jquery 数据表。这让我想起了 datatables 数字(或单词?)中的 server_processing,使用 ',' 分隔小数。

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

当我单击升序和降序箭头时,数字方法中不会发生排序,而是方法文本中发生排序。前任。10.01> 9.99(数字)

如何让它与我的号码一起使用?

4

5 回答 5

2

我尝试了数据表页面的示例。它对我来说很好。

数据应为十进制格式

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
        ]
    });
});
于 2014-06-25T20:20:41.433 回答
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 使用它来对列进行排序。此代码改编自DataTables 官方网站中的示例。

插件对象中的第一个函数,是将单元格值转换为数字的函数,以便可以通过以下函数对其进行排序。在这种情况下,我遵循了这篇文章的建议,并使用一元运算符将值转换为数字。如果值不是数字,则返回 NaN,我将其更改为 Number.MAX_VALUE。我这样做是因为我选择在升序排序时最后移动无效数字。

之后,只剩下创建数据表,并为我们想要的列定义新的数据类型。

jQuery("#myTable").dataTable( {
    "aoColumnDefs": [
        { "sType": "numeric-comma", "aTargets": [2,3] }
    ]
});

假设第三和第四列有逗号分隔的数字,它们现在必须正确排序。

于 2013-03-13T14:02:04.850 回答
1

尝试在您的头上插入以下代码。请记住更改数据表名称的“示例”。

$(document).ready(function() {
    $('#example').DataTable( {
        "language": {
            "decimal": ",",
            "thousands": "."
        }
    } );
} );
于 2016-12-20T13:17:57.840 回答
0

最新的dataTables版本(1.10.4)处理格式化数字排序,没有任何扩展名,即降序排序时puts $1,000.00before ,升序排序时puts before 。$900.00$900.00$1,000.00

请参阅http://datatables.net/reference/option/columns.typenum-fmt

于 2014-12-13T20:46:16.883 回答
0

如果您正在执行数据表的服务器端处理实现,则不能使用任何排序插件或 sType 变量,因为它们都驻留在客户端

您需要更新数据库查询以将列正确排序为数字/字符串,然后使用 mRender 或 javascript 更新列格式,以便排序确实与列格式有关

示例:从数据库中将钱作为数字返回,然后使用 mRender 添加逗号/货币类型

于 2013-05-31T15:11:05.623 回答