0

テーブル内の要素の順序を変更する関数を実装しようとしています。ロジックは非常に簡単です。各 TR (最初と最後のものを除く) には、button_up と button_down があります。ユーザーがこれらのボタンの 1 つをクリックすると、要素の位置が上または下に変わります。

これを行うために、私は jQuery を使用しており、各 TR には一意の ID があり、ボタンには共通のクラスがあります。

特定のクラスのボタンをクリックすると、次の JavaScript コードが実行されます。

$('.upArrow').click( function(something)     
        {           
            var id = $(this).attr("id");

            var n=id.split("_");

            var new_id = '#row_'+n[1];

            var parent =$(new_id);
            var prev = $(new_id).prev();

            swap(prev, parent); 

            init_authors_list_ordering();
        });


        $('.downArrow').live('click', function()
        {
             var id = $(this).attr("id");

                var n=id.split("_");

                var new_id = '#row_'+n[1];

                var parent =$(new_id);
                var next = $(new_id).next();

                swap(next, parent); 

                init_authors_list_ordering();
        });
}

function swap(a, b, direction)
{
    var html = a.wrapInner('<tr></tr>').html();
    a.replaceWith(b.wrapInner('<tr></tr>').html());
    b.replaceWith(html);
}

問題は次のとおりです。初めて、すべてが正常に機能します(私の機能は終了していません。変更時に他のパラメーターを設定する必要がありますが、ロジックはそこにあります)。しかし、その後、入れ替わった2つのエレメントはTRのIDを失ったため、もう触れることはできません。

なぜIDが失われたのかわかりません。これが replaceWith() メソッドです。

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

1

要素を交換するには、次のようにします。

function swap(a, direction, b) {
    a[direction](b);
}

そして次のように呼び出します:

var firstElem  = $('#divID'),
    secondElem = $('#divID');

swap(firstElem, 'before', secondElem); // or after, whatever you need ?

フィドル

于 2012-12-07T13:20:17.927 に答える
0

定数<tr></tr>には id 属性がないため、最終的に id 属性がなくなります。

編集:これが私が参照するものです:

function swap(a, b, direction)
{
    var html = a.wrapInner('<tr></tr>').html();
    a.replaceWith(b.wrapInner('<tr></tr>').html());
    b.replaceWith(html);
}
于 2012-12-07T13:11:43.057 に答える