0

我有一个价格字段和一个总额字段:价格字段的值为 0.9999900 或 0.9000000 总额可以是 10,000.00 或 1,000,000.00。我正在使用 tablesorter 库对表格进行排序。

问题是如果我像下面这样设置 s (总量排序工作正常)

s=s.replace(new RegExp(/[^0-9\/A-Za-z ]/g),"");

如果我设置如下(价格排序工作正常)

s=s.replace(new RegExp(/[^0-9\/A-Za-z. ]/g),"");

但我不能让两者同时工作。我错过了什么:

ts.addParser({
    id: "digit",
    is: function(s,table) {
        var c = table.config;
        s=s.replace(new RegExp(/[^0-9\/A-Za-z ]/g),"");
        return $.tablesorter.isDigit(s,c);
    },
    format: function(s) {
        return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9\/A-Za-z ]/g),""));
    },
    type: "numeric"
});
4

1 回答 1

1

我找到了围绕不同列的工作:

1)我在tablesorter中将两列都指向不同的功能,这样我就可以让价格和总量都以自己的方式工作。

在 tablesorter 下,我将标题修改为总金额列的数字和“总金额”列的千位。

headers: {8: { sorter: 'digit' },13: { sorter: 'thousands' }}

其中 8, 13 是我表上的列号。

2)对于“总金额”第 8 列,我使用了 id:digits

3)对于“价格”第 13 列,我使用了自定义解析器 ID:“千”

两者的 Tablesorter 代码都包含在下面

id: "digit"-->Tablesorter 库中的现有代码

ts.addParser({
    id: "digit",
    is: function(s,table) {
        var c = table.config;
        s=s.replace(new RegExp(/[^0-9\/A-Za-z ]/g),"");
        return $.tablesorter.isDigit(s,c);
    },
    format: function(s) {
        return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9\/A-Za-z ]/g),""));
    },
    type: "numeric"
});

id: 'thousands'--> 自定义表排序器添加到表排序器库中。

ts.addParser({ 
    id: 'thousands',
    is: function(s) { 
        return false; 
    }, 
    format: function(s) {
        return s.replace(new RegExp(/[^0-9\/A-Za-z. ]/g),"");
    }, 
    type: 'numeric' 
});

$(function() {
    $("table").tablesorter({
        headers: {
            6: {//zero-based column index
                sorter:'thousands'
            }
        }
    });
});
于 2012-11-19T19:00:01.857 回答