1

jQueryテーブルの並べ替えスクリプトを作成しています。はい、はい、私はそのためのプラグインがあることを知っていますが、他の誰かのコートの尾を取り除くことの楽しみはどこにありますか(学習と理解の完全な欠如は言うまでもありません)?

ですから、アルファ型については良いソートが行われています。現在、数値ソートに取り組んでいます。

とても速くて汚い。列の値を取得し、それらを配列にプッシュします。

    var counter = $(".sort tr td:nth-child("+(columnIndex+1)+")").length;

    for (i = 1; i <= counter; i++) {
        columnValues.push($(".sort tr:eq("+i+") td:eq("+columnIndex+")").text());
    }

次に、それらの配列を並べ替えます。

    columnValues.sort(function(a,b){
        return a-b
    });

次に、一意のエントリを確認します(これは主に同じ名前の場合です)。

    $.each(columnValues, function(i, el){
        if($.inArray(el, uniqueColumns) === -1) uniqueColumns.push(el); 
    });

次に、配列をキーのリストとして使用して、テーブルからデータを取得し、別の配列にプッシュします。ここで問題が発生します。名前の場合は問題なく機能しますが、番号(3、30、36)では機能しません。3で始まるソートされたリストでは、30および/または36の3を確認し、それを取得します。

これが私が試したことです:

    for (i = 0; i < counter; i++) {
        var key = uniqueColumns[i];

        $(".sort tr:contains("+key+") td").each(function(){
            rowValues.push($(this).text());
        });

    }

と:

    for (i = 0; i < counter; i++) {
        var key = uniqueColumns[i];

        $(".sort tr td").filter(function(i){
            if($(this).text() === key) {
                rowValues.push($(this).text());
            }
        });
    }

これは、最初のコードセット(2番目のコードよりもうまく機能する)でコードを実行するフィドルです。

アップデート:

また、これを試してみました(まだ機能しておらず、最初の並べ替えでは機能しますが、その後は機能しません):

    for (i = 0; i < counter; i++) {
        var key = uniqueColumns[i];
        var found = false;

        $(".sort tr:contains("+key+")").filter(function(j){
            $(this).children().each(function(){
                if ($(this).text() === key) {
                    found = true;
                } 
            });

            $(this).children().each(function(){
                if (found) {
                    rowValues.push($(this).text());
                } 
            });
        });
    }
4

1 に答える 1

0

私自身でそれを理解しました。まったく異なるアプローチを決定しました。テーブルデータから多次元配列を作成してから、数値データとアルファデータの両方で機能するカスタムの並べ替え関数を作成しました。これは、データを取得し、データを並べ替え、テーブルを書き換える関数です。

function sort(column) {
    var columnIndex = $(column).index(),
    rowValues = [];

    /* Get Data */
    $(".sort tr").not(":first-child").each(function () {
        var innerArray = [];

        $(this).find('td').each(function () {
            innerArray.push($(this).text());
        });

        rowValues.push(innerArray);
    });

    /* Sort Data */
    rowValues.sort((function(index){
        return function(a, b){                
            if (!isNaN(a[index])) {
                a[index] = parseInt(a[index]);
            }

            if (!isNaN(b[index])) {
                b[index] = parseInt(b[index]);
            }

            return (a[index] === b[index] ? 0 : 
                   (a[index] < b[index] ? -1 : 1));
        };
    })(columnIndex));

    /* Replace Data */
    $(".sort tr").not(":first-child").each(function(i){
        $(this).find("td").each(function(j){
            $(this).replaceWith("<td>"+rowValues[i][j]+"</td>");
        });
    });
}
于 2013-03-01T15:32:41.910 に答える