0

列ヘッダーをクリックすると、テーブル行の Asc と Desc を並べ替えようとしています。Firefox と Chrome では正常に動作しますが、IE では動作しません。最新バージョンのjqueryを入手するなど、さまざまなことを試しましたが、それでも同じ問題が発生します。一部の列はアルファベット順で並べ替え、一部は数値で並べ替え、一部は null 値に基づいて並べ替え、最後に一部は checkstate で並べ替えます。私はクラスに基づいてソートしています。

プラグインが使えません。これは私が持っているものです。これが IE 以外のすべてのブラウザで機能するのはなぜですか? 私は何度も見ましたが、誰かが同じようにソートしている場所では、このような例を見つけることができません。どんな情報でも役に立ちます。ありがとう!

これがjqueryです-

<script type="text/javascript">
$(document).ready(function () {
    $('.s').click(function () { //this is my header click

        var NotOptional;
        var checkState;

        if ($(this).hasClass('o')) { //optional column
            NotOptional = false;
        } else {
            NotOptional = true;
        }
        if ($(this).hasClass('cs')) { //class on my input items
            checkState = true;
        } else {
            checkState = false;
        }


        var o = $(this).hasClass('asc') ? 'desc' : 'asc';
        $('.s').removeClass('asc').removeClass('desc');
        $(this).addClass(o);

        var colIndex = $(this).prevAll().length;  //getting the rows
        var tbod = $(this).closest("table").find("tbody")
        var rows = tbod.find("tr").not('.first');

        rows.sort(function (a, b) {

            if (checkState == true) {   //if its a check box or radio
                var A = $(a).find("td input").eq(colIndex);  //getting checkstate
                var B = $(b).find("td input").eq(colIndex);

                if (A.is(':checked') == true) {
                    A = 1;  //setting row value to compare
                } else {
                    A = 0;
                }
                if (B.is(':checked') == true) {
                    B = 1;
                } else {
                    B = 0;
                }

                if (A < B) {  //returning compare for input
                    return A < B;
                } else if (A == B) {
                    return A == B;
                } else if (A > B) {
                    return A > B;
                }

            } else {
                if (NotOptional == false) {  //not optional never blank 
                    var A = $(a).find("td").eq(colIndex).text().toUpperCase();
                    var B = $(b).find("td").eq(colIndex).text().toUpperCase();

                } else { 
//these don't have to have a value but might contain numeric, letter or a null value
                    var A = $(a).find("td").eq(colIndex).text().toUpperCase();
                    var B = $(b).find("td").eq(colIndex).text().toUpperCase();
                    if (!isNaN(A)) A = Number(A);
                    if (!isNaN(B)) B = Number(B);
                }
            }

            return o == 'asc' ? A > B : A < B;
        });

        $.each(rows, function (index, ele) {
            tbod.append(ele); //appending the rows
        });

    }); //end sortable click

私はこれに行き詰まっており、IEが行の並べ替えを理解できない理由を理解できません。それが役立つ場合、この jquery は aspx ページのユーザー コントロールにあります。IE で開発ツールを使用してマークアップを確認しましたが、クラスはそこにあります。Jquery クリックで実行されますが、行を比較すると、すべて混乱してランダムに追加されます (つまり、何も並べ替えません)。

4

1 に答える 1

0

Ok。私は故障して、Tablesorter を使用することにしました。みんな助けてくれてありがとう。テーブルを並べ替えたいがクロス ブラウザー サポートが必要な人には、tablesorter を使用して独自のパーサーを作成することをお勧めします。

http://mottie.github.io/tablesorter/docs/example-parsers-advanced.html

于 2013-04-17T19:35:01.380 に答える