jQuery tablesorter排序格式化的货币

安东尼·罗伯茨

编辑,基于莫蒂答案的新代码:

jQuery.tablesorter.addParser({
    id: "monetaryValue",
    is: function (s) {
        return false;
    }, format: function (s) {
        return s.replace('$','').replace(/,/g,'');
    }, type: "numeric"
});
var tablezor = jQuery(".tablesorter");
tablezor.tablesorter({
        headers: {
            4 : { sorter: "monetaryValue" }
        },
        sortList: [[7,0]]
});

和HTML:

<table class="tablesorter">
<thead>
    <tr>
        ...
        <th>Processing Fees</th>
        ...
    </tr>
</thead>
<tbody>
{% for cs in customer_stats %}
    <tr class="js_striped">
        ...
        <td>
            <script>
                var options = {style:"currency", currency:"USD", minimumFractionDigits: 2,maximumFractionDigits: 2};
                document.write(new Intl.NumberFormat("en-US", options).format({{ customer_stats[cs]['processing_fee'] }}));
            </script>
        </td>
        ....
    </tr>
{% endfor %}
</tbody>
</table>

我尝试了十二个示例来解决此问题,但没有任何效果。

我正在使用jQuery.tablesorter对表进行排序,当我将数字格式化为货币格式(美元,格式为$ 1,945.00)时,货币列将无法正确排序

这是Django模板,模板变量呈现为无格式数字,如1945.0,因此我需要使用javascript添加格式。我想使用人性化模板过滤器库,但我们使用的Jinja却没有。我需要在客户端上进行格式化,因此python建议可能行不通。

当它只是一个数字时,它可以很好地排序。当我使用一个小脚本标签(是的,我知道这不是最好的方法,这是一个短期修复,直到我们用Backbone重新编写前端)将数字格式化为货币,但排序却没有工作。排序如下:

$ 3,380.00

$ 350.00

$ 353.24

$ 3,535.24

等等。

这是格式化为货币的函数:

function formatDollar(num) {
    var p = num.toFixed(2).split(".");
    return '$' + p[0].split("").reverse().reduce(function(acc, num, i, orig) {
        return  num + (i && !(i % 3) ? "," : "") + acc;
    }, "") + "." + p[1];
}

这是HTML:

<table class="tablesorter">
    <thead>
        <tr>
            ...
            <th class="{sorter:'monetaryValue'}">Processing Fees</th>
            ...
        </tr>
    </thead>
    <tbody>
    {% for cs in customer_stats %}
        <tr class="js_striped">
            ...
            <td>
                <script>
                    var money = formatDollar({{ customer_stats[cs]['processing_fee'] }});
                    document.write(money);
                </script>
            </td>
            ....
        </tr>
    {% endfor %}
    </tbody>
</table>

和tablesorter的自定义解析器:

var tablezor = jQuery(".tablesorter");
tablezor.tablesorter({
        sortList: [[1,1]]
});
tablezor.addParser({
    id: "monetaryValue",
    is: function (s) {
        return false;
    }, format: function (s) {
        return s.replace('$','').replace(/,/g,'');
    }, type: "numeric"
});

随时告诉我,这有多可怕。如果您能告诉我如何让tablesorter正确地对货币进行排序,则欢迎任何批评。

谢谢,

安东尼·罗伯茨

解决我的问题的方法是在服务器上进行格式化。

也许这是一个教训,不要在我的标记中加入一些胡扯。

作为记录,在我的Django视图中,我这样做:

customer_stats[c['customer']]['processing_fee'] = '${:,.2f}'.format(float(c['processing_fee']))

然后,我删除了自定义解析器,并使用了它:

tablezor.tablesorter({
    sortList: [[4,1]],
    textExtraction: function(node){ 
        return $(node).text().replace(/[,$£€]/g,'');
     }
});

textExtraction解决了解析问题。

再次感谢Mottie所做的所有努力。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery tablesorter排序格式货币

来自分类Dev

jQuery tablesorter-格式化货币-我该怎么做?

来自分类Dev

如何使用JQuery格式化货币

来自分类Dev

如何使用JQuery格式化货币

来自分类Dev

使用TableSorter进行排序和格式化

来自分类Dev

jQuery显示格式化的JSON

来自分类Dev

在jQuery中格式化日期时间

来自分类Dev

格式化javascript / jquery中的值

来自分类Dev

jQuery格式化日期范围

来自分类Dev

jQuery json数据未格式化

来自分类Dev

格式化javascript / jquery中的值

来自分类Dev

使用jQuery datepicker格式化日期

来自分类Dev

jQuery tablesorter,编号排序列

来自分类Dev

使用jQuery格式化电话号码格式

来自分类Dev

jQuery以特定格式格式化输入

来自分类Dev

用jquery numberformatter格式化数字并将其格式化回

来自分类Dev

用jquery numberformatter格式化数字并将其格式化回

来自分类Dev

格式化UITextField以获取货币

来自分类Dev

使用numberFormatter格式化货币

来自分类Dev

需要格式化TextView的货币

来自分类Dev

使用numberFormatter格式化货币

来自分类Dev

使用jQuery替换的Highcharts工具提示格式化程序

来自分类Dev

用jQuery格式化多个PHP日期

来自分类Dev

jQuery或Javascript自动格式化手机掩码

来自分类Dev

使用jQuery ui datepicker格式化实际日期

来自分类Dev

使用jQuery格式化文本文件

来自分类Dev

jQuery mobile data-role =“ button”未格式化

来自分类Dev

如何格式化Ben Alman的jQuery Debounce

来自分类Dev

使用jQuery格式化文本文件