6

jquery tablesorter プラグインを使用してテーブルをソートしています。テーブルの列の 1 つに、日付が mm/yy 形式で表示されます。

<tr>
    <td class="col-name">...</td>
    ...
    <td rel="2000" class="col-dob">10/00</td>
    ...
</tr>
<tr>
    <td class="col-name">...</td>
    ...
    <td rel="1986" class="col-dob">11/86</td>
    ...
</tr>

ノート:

  • 各セルには固有のクラスがあります
  • 日付は mm/yy 形式で表示されます
  • 日付のあるセルには年も表示されます

私のjQueryコードは次のとおりです。

// add parser through the tablesorter addParser method
$.tablesorter.addParser({
        // set a unique id
        id: 'user-birthdate',
        is: function(s) {
                // return false so this parser is not auto detected
                return false;
        },
        format: function(s) {
                // format your data for normalization

                var dateSplit = s.split('/');

                if(2 !== dateSplit.length)
                        return 0;

                return new Date(dateSplit[1], dateSplit[0], 1);
        },
        // set type, either numeric or text
        type: 'numeric'
});

myClass.init = function() {
        $('.module .user table').tablesorter({
                sortList: [[0,0]],     
             widgets: ['zebra'],
                headers: {
                        5: {
                                sorter:'user-birthdate'
                        }
                }
        });
}

myClass.init();

私の問題は、tableSorter が 00 を 2000 年ではなく 1900 年として解釈するため、ソートされたデータが正しくないことです。

どうすればこれを解決できますか?jQuery 1.2.6 と最新バージョンの tablesorter を使用しています。

4

2 に答える 2

9

テーブルソーターのドキュメントは、多くの場合、かなり役に立たないことがわかりました。多くのことを言っているように見えますが、詳細が不足しています。

この場合、パーサーの関数シグネチャは通知されません。幸いなことに、縮小されていないコードを読んで見つけることができます。

metadataそこで、パーサーがこれを行うことがわかります。

format: function(s,table,cell) {

これは、フォーマット方法を次のように調整できることを意味します。

format: function(s, table, cell) {
    // format your data for normalization

    var dateSplit = s.split('/');
    var year = $(cell).attr('rel');

    if(2 !== dateSplit.length)
        return 0;

    return new Date(year, dateSplit[0], 1);
},

または少なくともそれに似ています。私は実際にこれをテストしていません。しかし、それは少なくとも非常に近いはずです。

于 2009-01-17T05:12:09.700 に答える
0

あなたの問題は、日付コンストラクターと、明確化せずに渡す 2 桁の年文字列であることがわかると思います。new Date(dateSplit[1], dateSplit[0], 1);

パーサーの s に基づいて rel に(簡単に)アクセスできるとは思いません。s にはセルの内容全体が含まれていますか? セル内のデータで次のようなことを行うことはできますか<span style="display : none">CC</span>MM/YY? タグを取り除き、パースで CC と YY を組み合わせますか?

于 2009-01-16T16:15:55.710 に答える