如何正确排序Jquery Datatable货币列?

时间:2016-12-15 19:09:34

标签: jquery sorting datatables

我正在使用Datatables Version 1.10.12和jquery-1.11.1

我的货币栏没有正确排序,下面是我用来排序的代码

$(document).ready( function () {
        $('#notSoCoolGrid').DataTable({
            "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
            columnDefs: [{ type: 'currency', targets: 1 }],
            "aaSorting": [[ 2, 'asc' ]]
        } );
    } );

我收到如下所示的货币栏。请注意括号()被视为负数

($ 75.00)美元

($ 108.87)美元

($ 249.44)美元

($ 1,000.00)美元

£899.00 GBP

$ 905.00 AUD

£830.65 GBP

$ 825.00 USD

£59.67 GBP

2 个答案:

答案 0 :(得分:1)

使用brackets-negative排序插件。您的代码可以保持不变,您只需要包含额外的JS文件//cdn.datatables.net/plug-ins/1.10.13/sorting/brackets-negative.js

答案 1 :(得分:0)

以下是我最终的结果,我也要考虑汇率。

<link href="datatables/1.10.13/css/jquery.dataTable.min.css" type="text/css" rel="stylesheet" />
    <script src="js/jQuery/1.11.1/jquery.js"></script>
    <script src="datatables/1.10.13/js/jquery.dataTables.js"></script>
    <script>
        $(document).ready( function () {
            var currencies = { GBP: 1.2403, AUD: 0.7364, USD: 1 };
            $.fn.dataTable.ext.type.order['currencies-pre'] = function(d) {
                var sign = /\([^)]*\)/.test(d)?-1:1;
                var currency = currencies[d.match(/USD|GBP|AUD/).pop()]; // /!\ all MUST have currency
                var n = d.replace(/[^\d.]/g,"");
                console.log(sign * n * currency);
                return sign * n * currency;
            };
            $('#notSoCoolGrid').DataTable({
                "aoColumns": [{ sWidth: "10%", bSearchable: false, bSortable: false }, { sWidth: "90%", bSearchable: false, bSortable: true }],
                "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
                "columnDefs": [{ type: 'currencies', targets: 1 }],
                "aaSorting": [[ 1, 'asc' ]]
            });
        });
    </script>