2009-06-01 10 views
10

私はjQuery Tablesorterを使用しており、パーサーが表の列に対して適用される順序に問題があります。 $ -3.33という形式の通貨を処理するカスタムパーサを追加します。JQueryテーブル・パーサーのカスタム・パーサー

$.tablesorter.addParser({ 
    id: "fancyCurrency", 
    is: function(s) { 
     return /^\$[\-]?[0-9,\.]*$/.test(s); 
    }, 
    format: function(s) { 
     s = s.replace(/[$,]/g,''); 
     return $.tablesorter.formatFloat(s); 
    }, 
    type: "numeric" 
}); 

問題は、組み込み通貨パーサーが私のカスタムパーサーよりも優先されるようです。私はパーサを(通貨パーサの前に)tablesorterコード自体に置くことができ、それは正しく動作しますが、これはあまりメンテナンスできません。

headers: { 
    3: { sorter: "fancyNumber" }, 
    11: { sorter: "fancyCurrency" } 
} 

のように、ソーターを手動で指定することはできません。表の列はユーザ​​ーの入力から動的に生成されるからです。私は1つのオプションは、CSSクラスとして使用するソーターを指定し、this questionのようなソーターを明示的に指定するためにいくつかのJQueryを使用すると思いますが、可能ならば動的検出に固執したいと思います。

+0

肯定的な通貨の値がある場合、または常に負の値がある場合には失敗しますか? –

+0

@Tim:私の答えをチェックし、それが役に立つと考えてください。ありがとう、友達。 – Gaurav123

答えて

9

最初のオプションは、通貨値を持つ列に追加クラス "{'ソーター': '通貨'}を与えることです。また、プラグインのメタデータも含んでいることを確認してください。これは、要素ごとのオプションを引き込み、明示的にテーブル・ソーターにソート方法を伝えます。

また、通貨をフォーマットする機能にバグがあります。負の数は処理されません。

私はbugを提出しており、パッチの着陸に取り掛かっています。

2番目の方法は、この修正をtablesorterのコピーに適用することです。修正プログラムを適用したら、thまたはtdに通貨ソートを指定する必要はありません(tdの指定はとにかく過剰殺しです)。 jquery.tablesorter.jsの

編集ライン724:

リターン$ .tablesorter.formatFloat(s.replace(新しい正規表現(/ [^ 0-9]/g)を、 "")) ;

変化に:

リターン$ .tablesorter.formatFloat(s.replace(新しい正規表現(/ [^ - 0-9。]/g)、 ""));

場合:

  • 値:$ -3、$ 1、$ 3

  • 電流ASC順序:$ 1、$ 3、$ - 3

  • 予想ASC順序$ -3 $ 1、$ 3

場合:

  • 値: - $ 3 $ 1、$ 3

  • 電流ASC順序:$ 1、$ 3 - $ 3

  • 予想ASC順序$ -3 $ 1 $ 3で

+0

正規表現はまったく動作しませんので、私の解決策は正解ではありません。私は現在のコードが負の通貨を全く扱っていないことを知っています。 –

+0

素敵な書きかけです。私はいくつかのjQueryを使用して、ヘッダーフィールド名のスラッグに基づいてカスタムパーサのソートメタデータを追加しました。 –

2

私は同様の問題があり、セルにマークアップが含まれている場合に推奨されるtextExtractionオプションを発見しました。しかし、それはプリフォーマットフォーマッタとして完璧に機能します!

$('table').tablesorter({ 
    textExtraction: function(s) { 
    var text = $(s).text(); 
    if (text.charAt(0) === '$') { 
     return text.replace(/[^0-9-.]/g, ''); 
    } else { 
     return text; 
    } 
    } 
}); 
0

私はこのようなものを使用してくれました。

このクラスは、<番目のクラス= "{'ソーター': '数字'}">列< td class = "{'ソーター': '数字'}」>に使用してください。

完了したら、すべての通貨を数字の形で取得するためのjavascriptコードを変更します。

これを実行して、ソートを楽しんでください!ここ

コードである:

HEADER:

<th style='width: 98px;' class="{'sorter':'digit'}"> 
      Amount 
    </th> 

カラム(TD):

<td align="left" style='width: 98px;' class="{'sorter':'digit'}"> 
      <%= Convert.ToDouble(a.AMOUNT ?? 0.0).ToString("C3") %> 
</td> 

JAVASCRIPT:

<script language="javascript" type="text/javascript"> 
    jQuery("#rewardtable").tablesorter({ 
    textExtraction: function (data) { 
     var text = $(data).text(); 
     if (text.toString().indexOf("-$") != -1) { 
      return ("-" + text.replace(new RegExp(/[^0-9.]/g), "")); 
     } 
     else if (text.toString().indexOf("$") != -1) { 
      return (text.replace(new RegExp(/[^-0-9.]/g), "")); 
     } 
     else { 
      return text; 
     } 
    } 
    });