数据表...排序不能使用数字逗号...为什么?

时间:2013-03-13 13:45:05

标签: jquery sorting numbers datatables comma

我将jquery数据表与server_processing一起使用。 这让我想起了datatables中的server_processing 带有','十进制分隔符的数字(或单词?)。

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

当我点击箭头上升和下降时, 排序不会出现在数字方法中,而是出现在方法文本中。 恩。 10.01> 9.99(数字)

如何使用我的号码?

5 个答案:

答案 0 :(得分: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 official site

中可以找到的示例的修改

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

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

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

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

答案 1 :(得分:2)

我尝试过datatables页面的例子。它对我来说很好。

数据应为十进制格式

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

答案 2 :(得分:1)

尝试在头上插入以下代码。记得改变&#34;例子&#34; 对于您的数据表名称。

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

答案 3 :(得分:0)

如果您正在进行Datatables的服务器端处理实现,则不能使用任何排序插件或sType变量,因为它们都位于客户端

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

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

答案 4 :(得分:0)

最新的dataTables版本(1.10.4)处理格式化的数字排序,没有任何扩展名,即在按{1}}降序排序时放$1,000.00并将$900.00放在$900.00之前1}}按升序排序时。

请参阅http://datatables.net/reference/option/columns.type中的$1,000.00