0

私はjavascript関数insertAfterとinsertBeforeで遊んでいますが、insertAfterとinsertBefore2要素を試しています。

たとえば、次のHTMLについて考えてみます。

<table>
    <tbody>
        <tr>
            <td>
                Item 1
            </td>
            <td>
                <div class="moveUpDown">
                    <div class="up">
                    </div>
                    <div class="down">
                    </div>
                    <div>
                    </div>
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <table>
                    <tr>
                        <td>
                            1
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td>
                Item 2
            </td>
            <td>
                <div class="moveUpDown">
                    <div class="up">
                    </div>
                    <div class="down">
                    </div>
                    <div>
                    </div>
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <table>
                    <tr>
                        <td>
                            1
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
</table>

次に、このjavascriptコードスニペットがあります

var row = $(this).parents("tr:first");
if ($(this).is(".up")) {
    row.insertBefore(row.prev());
} else {
    row.insertAfter(row.next());
}

基本的に、Upクラスが呼び出されると、前の行が上に移動し、Downクラスが呼び出されると、現在の行が1行下に移動します。

私がやりたいのは、行を上下に2行移動することです...これは、row.prev()。prev()やrow.next()。next()のようなものを意味しますが、これは機能しないようです。

これを回避する簡単な方法はありますか?

ありがとう、助け/提案をいただければ幸いです。

4

1 に答える 1

2

上がる

row.prev().prev().before(row)

降りる

row.next().next().after(row)

明らかに tr が存在する必要があります prev/next が存在する必要があります

NB 最初の tr 要素として行をキャッシュしているため、最初の tr 要素が変更されるたびに行が変更されます

イベントを聞く

$("table").on("click","tr > td > span.moveup", function() {
  var row = $(this).parent().parent();

 if (row.prev().prev().get(0)) row.prev().prev().before(row)

})
于 2013-01-16T17:44:28.410 に答える