在JQuery中交换行

Dot*_*ude 27 jquery

如果我有一个如下所示的表,并且有一个向上和向下移动行的箭头,我将如何在JQuery中交换行?

<tr id="Row1">
  <td>Some label</td>
  <td>Some complex control</td>
</tr>
<tr id="Row2">
  <td>Some label</td>
  <td>Some complex control</td>
</tr>
<tr id="Row3">
  <td>Some label</td>
  <td>Some complex control</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

小智 63

这是另一种解决方案.

要向下移动一行:

jQuery("#rowid").next().after(jQuery("#rowid"));
Run Code Online (Sandbox Code Playgroud)

要向上移动一行:

jQuery("#rowid").prev().before(jQuery("#rowid"));
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个接受的答案,因为你不需要知道另一行的id(可能不是页面加载时的位置,因为行已被移动). (6认同)
  • 我个人在单元格中添加按钮给这个答案并使用`$(this).closest("tr").next().after($(this).closest("tr"));`绑定到`$. click()`函数 (5认同)

cob*_*bal 26

$("#Row1").after($("#Row2"));
Run Code Online (Sandbox Code Playgroud)

将工作

  • 此代码将Row2放在Row1之后.请参阅`$ .after`的文档. (4认同)
  • @DanielAllenLangdon是对的 - $("#Row1").after($("#Row2"));`不起作用.它应该是`$("#Row2").after($("#Row1"));`或`$("#Row1").insertAfter($("#Row2"));` - 见: http://api.jquery.com/after/和http://api.jquery.com/insertAfter/ (2认同)

Tod*_*son 8

这是一个稍微扩展的例子,希望你会发现它很有用...... :)

$('table').on('click', '.move-up', function () {
    var thisRow = $(this).closest('tr');
    var prevRow = thisRow.prev();
    if (prevRow.length) {
        prevRow.before(thisRow);
    }
});

$('table').on('click', '.move-down', function () {
    var thisRow = $(this).closest('tr');
    var nextRow = thisRow.next();
    if (nextRow.length) {
        nextRow.after(thisRow);
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 6

这是交换行的代码。让我们以#Row1 和#Row3 为例

$('#Row1').replaceWith($('#Row3').after($('#Row1').clone(true)));
Run Code Online (Sandbox Code Playgroud)

使用clone(true) 以便事件也被考虑在内。

如果您想上下移动行,请使用此代码。向上移动行

var tableRow = $("#Row1");
tableRow.insertBefore(tableRow.prev());
Run Code Online (Sandbox Code Playgroud)

向下移动行

var tableRow = $("#Row1");
tableRow.insertAfter(tableRow.next());
Run Code Online (Sandbox Code Playgroud)