1

文字列を含む列で TableSorter を使用しています。

$.tablesorter.addParser(
    {
        id: 'positions',
        is: function(s) {
                return false;
            },
        format: function(s) {
                var abbr=s.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos);
                return abbr;
            },
        type: 'numeric'
    }
);

format 関数は、グローバル _sortpos 変数に依存する値を返す必要があります。この値は動的に変化します。この線:

var abbr=s.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos);

すべての非数字および非文字を取り除き、特定の数の最初の文字を削除します。意図は、_sortpos-th 文字でソートすることです。

パーサーがテーブル ソーターに追加されたときに、各文字列に対して format 関数が 1 回だけ解析されるようです。ただし、私の目的では、ソートするたびに format 関数を再実行する必要があります。

これまでのところ、ソートするたびにパーサーを追加しようとしました。しかし、それはうまくいきませんでした。また、初期化を再実行してテーブルソーターを再初期化しようとしました

$(".tablesorter").tablesorter(
    {
        sortReset: true,
        headers: {
            1: {
                sorter: 'positions'
            }
        }
    }   
); 

しかし、役に立たない。

どうすればよいですか?また、グローバルパラメータをこっそり入れるために使用できるコンパレータ関数はありますか? 次に、パーサーで文字列をフォーマットし、コンパレーターで動的に slice() 関数で _sortpos を使用できます。

4

1 に答える 1

0

私は自分で答えを見つけました:

$(document).ready(function() {  
    $(".tablesorter").tablesorter(
        {
            textSorter: function(a, b, table, column){                  
                if (column==1)
                {
                    var c=parseInt(a.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos));
                    var d=parseInt(b.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos));                 
                    return ((c < d) ? -1 : ((c > d) ? 1 : 0));
                }
                return a.localeCompare(b);              
            }           
        }
    );  
});

パーサーを使用せず、カスタム ソーターで column==1 のみを並べ替えます。

于 2013-07-03T21:44:15.530 に答える