1

同じ問題 ( jquery tablesorter ajax table only sorting one direction )を抱えている他の人を見ましたが、それは同じ原因ではありません。

jQuery Tablesorter ( https://github.com/Mottie/tablesorter ) のフォークを使用して、 data-attribute を使用してカスタム パーサー (フランス語の日付/時刻) を介して列を並べ替えます。

<td data-since="28-09-2012 15:41:10">
    <strong>4 jours, 16 minutes</strong> (28-09-2012 15:41:10)
</td>

列を昇順でソートすることはできますが、列ヘッダーをもう一度クリックしようとすると、プラグインが降順でソートされません。

基本データ形式の他の列は、両方向で正しくソートされます。

ドキュメントおよびその他のスタックオーバーフローの投稿に基づくカスタムパーサーは次のとおりです。

$(document).ready(function() {
    //https://stackoverflow.com/questions/9550354/jquery-tablesorter-plugin-secondary-hidden-sorting
    $.tablesorter.addParser({
        // set a unique id
        id: 'parseSinceColumn',
        is: function(s) {
            return /\d{1,2}-\d{1,2}-\d{1,4} \d{1,2}:\d{1,2}:\d{1,2}/.test(s);
        },
        format: function(s, table, cell, cellIndex) {
            // get data attributes from $(cell).attr('data-something');
            var cellDate = $(cell).attr('data-since');

            s = s.replace(/\-/g," ");
            s = s.replace(/:/g," ");
            s = s.split(" ");

            return new Date(s[2], s[1]-1, s[0], s[3], s[4], s[5]).getTime();
        },
        // set type, either numeric or text
        type: 'numeric'
    });
    $("#pr-table").tablesorter({
        headers : {
            3 : { sorter: 'parseSinceColumn' }
        }
    });
});

それを修正する方法について何か考えはありますか?

どうもありがとう。

編集 :

プラグインは本当にソートしようとしていると思いますが、結果は同じです。

プラグインのデバッグは次のとおりです。

  • 最初の並べ替え、成功:

3,1およびdirで1回ソート(8ms)

テーブルの再構築 (3ms)

ウィジェットの適用完了 (0ms)

  • 2 番目の並べ替え、並べ替えに変更なし:

3,0 および dir 0 時間 (7ms) での並べ替え

テーブルの再構築 (3ms)

ウィジェットの適用完了 (0ms)

4

1 に答える 1

1

私はついに解決策を見つけました。

2つの大まかなエラーがありました:

  • プラグインに、インデックス列3にはパーサー「parseSinceColumn」があるため、「is」関数はfalseを返す必要があることを伝えています。実際、「s」はデータ属性のコンテンツではないため、セルのコンテンツは正規表現と一致できません。プラグインは、それがその列に適したパーサーであることを検出できません。

    • format関数は、「s」パラメーターを使用して日付を解析します。良い変数はcellDateです...

これは最後の機能的なスニペットです:

$(document).ready(function() {
    //http://stackoverflow.com/questions/9550354/jquery-tablesorter-plugin-secondary-hidden-sorting
    $.tablesorter.addParser({
        // set a unique id
        id: 'parseSinceColumn',
        is: function(s) {
            return false;
        },
        format: function(s, table, cell, cellIndex) {
            var cellDate = $(cell).attr('data-since');
            // get data attributes from $(cell).attr('data-something');
            // check specific column using cellIndex
            cellDate = cellDate.replace(/\-/g," ");
            cellDate = cellDate.replace(/:/g," ");
            cellDate = cellDate.split(" ");

            return new Date(cellDate[2], cellDate[1]-1, cellDate[0], cellDate[3], cellDate[4], cellDate[5]).getTime();
        },
        // set type, either numeric or text
        type: 'numeric'
    });
    $("#pr-table").tablesorter({
        headers : {
            3 : { sorter: 'parseSinceColumn' }
        }
  });
});
于 2012-10-03T10:04:09.933 に答える