0

価格フィールドと合計金額フィールドがあります。価格フィールドの値は 0.9999900 または 0.9000000 合計金額は 10,000.00 または 1,000,000.00 です。tablesorter ライブラリを使用してテーブルをソートしています。

問題は、以下のように設定した場合です(合計金額の並べ替えは正常に機能します)

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:数字を使用しました

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' --> カスタム テーブル ソーターが tablesorter ライブラリに追加されました。

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 に答える