4

私はこのすばらしいバージョンの jQuery Tablesorter を使用しています: http://mottie.github.com/tablesorter/docs/index.html

すべてがうまく機能していますが、今はこの問題があります。私のテーブルには、バスケットボール選手のポジションを含む列が 1 つあります。したがって、その列を PG-SG-SF-PF-C のように論理的に並べ替える必要があります。

このカスタム ソート関数を作成しようとしました。スクリプトの列 2 を見てください。

$(document).ready(function() { 

    $(".stats").tablesorter({
            sortInitialOrder: 'desc',
            sortRestart: true,
            // Enable use of the characterEquivalents reference 
            sortLocaleCompare: false, 
            // if false, upper case sorts BEFORE lower case 
            ignoreCase: true,
            headers: { 
                0: { 
                        sortInitialOrder: 'asc'
                }, 
                1: { 
                        sortInitialOrder: 'asc'
                },
                2: { 
                        textSorter: function(a, b){ 
                            var positions = {
                                "PG": 0,
                                "SG": 10,
                                "SF": 20,
                                "PF": 30,
                                "C": 40
                            };
                            return ((positions[a] < positions[b]) ? -1 : ((positions[a] > positions[b]) ? 1 : 0)); 
                        },
                        sortInitialOrder: 'asc'
                }
            }
        }
    ); 

});

ただし、列は通常のテキスト文字列 (C-PF-PG-SF-SG) のようにアルファベット順にソートされています。

どこで間違いを犯していますか?私はJavascriptが特に得意ではないので、おそらくソート機能のどこかにあります。ありがとうございました。

4

1 に答える 1

6

この質問に示されているように、独自のパーサーを追加することでそれを理解しました: Sorting Image and hyperlink columns in a table using JQuery Sorter plugin

スクリプトが動作するようにコピーします。誰かの役に立てば幸いです。

$(document).ready(function() { 

    $.tablesorter.addParser({
            // set a unique id 
            id: 'positions',
            is: function(s) {
                    // return false so this parser is not auto detected 
                    return false;
            },
            format: function(s) {
                    // format your data for normalization 
                    return s.toLowerCase()
                            .replace("pg", "d")
                            .replace("sg", "h")
                            .replace("sf", "m")
                            .replace("pf", "r")
                            .replace("c", "v");
            },
            // set type, either numeric or text 
            type: 'text'
    });     

    $(".stats").tablesorter({
            sortInitialOrder: 'desc',
            sortRestart: true,
            headers: { 
                0: { 
                        sortInitialOrder: 'asc'
                }, 
                1: { 
                        sortInitialOrder: 'asc'
                },
                2: { 
                        sorter: 'positions',
                        sortInitialOrder: 'asc'
                }
            }
        }
    );

});
于 2012-11-05T20:26:10.507 に答える