0

我正在使用 javascript 函数 insertAfter 和 insertBefore,但是我正在尝试 insertAfter 和 insertBefore 2 个元素。

例如,考虑以下 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 类被调用时,当前行向下移动一行。

我想要做的是将行向上/向下移动 2 行......意思是 row.prev().prev() 或 row.next().next() 但这似乎不起作用。

有没有简单的方法解决这个问题?

谢谢,将不胜感激任何帮助/建议。

4

1 回答 1

2

上去

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

往下走

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

显然 tr 必须存在 prev/next 必须存在

注意,您将行缓存为第一个 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 回答