使用jQuery将一行从一个表移动到另一个表

5

我跟随之前发布在这里的问题。

我需要做类似的事情,即每一行都有一个添加按钮,并且在单击添加图像时,我希望将该行移动到另一个表中,但是当我移动我的行时,目标表只有一个与源表相同的列(源表具有一个额外的列,而目标表中没有),我需要为移入目标表的每一行添加一个包含删除按钮图像的列。 现在可以使用以下代码从源中删除行:

$(document).ready(function () {
    $('#table_source td img.move_row').click(function () {
        $(this).parent().parent().parent().remove();
    });
});

当我在目标表中点击删除图像按钮时,该行应该移回原始表格。
提前感谢,
Priyank

制作选择器时要记住的一点是只需要尽可能具体。例如,您是否有在#table_source内但不在td中的img.move_row?如果没有,为什么要包括它?$('#table_source img.move_row')将是其确切等效项。 如果您已经到了这个地步,那么$('#table_source').find('img.move_row')仍然会更快。 - Sinetheta
3个回答

15

HTML

<table id="table_source">
    <tbody>
        <tr>
            <td>Row</td>
            <td>1</td>
            <td><img src='move_image_path' alt='Move' class='move-row' /></td>
        </tr>
        <tr>
            <td>Another Row</td>
            <td>2</td>
            <td><img src='move_image_path' alt='Move' class='move-row' /></td>
        </tr>
    </tbody>
</table>

<table id="table_dest">
    <tbody>
    </tbody>
</table>

JS

$(document).ready(function() {
    $("#table_source img.move-row").live("click", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find("img.move-row")
            .attr("src", "remove_image_path.jpg")
            .attr("alt", "Remove");
        $("#table_dest tbody").append(tr);
    });

    $("#table_dest img.move-row").live("click", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find("img.move-row")
            .attr("src", "move_image_path.jpg")
            .attr("alt", "Move");
        $("#table_source tbody").append(tr);
    });
});

嗨,我正在查看代码,我想要从tr中删除一个td列,然后再将其添加到目标表中。至于新的删除图像,我只需要更改目标tr的src字段,例如.attr("src", "new_delete_img_path.jpg")。 - pri_dev
2
.live() 在 jQuery 1.7 版本中已被弃用。将其替换为同样有用的 .on() 即可,非常简单易行。你可能可以在页面上找到一个合适的监听器,而不是 document,(就算什么都没有,一个包装 div 也可以!)但最坏的情况下,绑定到 document 将与使用 .live() 完全相同。 - Greg Pettit
1
我修改了js代码,使用了.click事件,像这样:$("#table_role img.move-row").click( function() {... - pri_dev
1
点击无法工作,因为您正在DOM上创建新元素。 如上所述,.on().live()应该可以工作。 我只是选择使用.live(),因为当人们使用旧版本的jQuery时,它更有可能起作用。 然而,使用.on()代表了一个更好、更具未来性的解决方案。 - Phil Klein
这里是一个可行的解决方案链接(再次使用.live()而不是.on()),您可以查看:http://jsfiddle.net/3JnbY/ - Phil Klein
显示剩余4条评论

2

尝试使用最新的jQuery库(2.1.4)实施上述建议,但它不能正常工作,我只能将行移动一次(任意方向)。 我不得不稍微改进它,但现在它可以工作了。 如果有人感兴趣,这是代码:

$(document).ready(function() {
    $("#table_source").on("click","img.move-row", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find("img.move-row")
            .attr("src", "remove_image_path.jpg")
            .attr("alt", "Remove");
        $("#table_dest tbody").append(tr);
    });

    $("#table_dest").on("click"," img.move-row", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find("img.move-row")
            .attr("src", "move_image_path.jpg")
            .attr("alt", "Move");
        $("#table_source tbody").append(tr);
    });
});

在纯JS中,可以这样写:dstTbl.tBodies[0].appendChild(srcTbl.tBodies[0].rows[0]) - David R Tribble

1
这里有一段代码片段,你可以运行它并查看一些工作中的jquery,以了解Phil的答案是如何工作的。他的答案对我实现类似的功能很有帮助,只是为了帮助某些人添加一个片段。

$(document).ready(function() {
    $("#table_source .move-row").on("click", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find(".move-row").text("-");
        $("#table_dest tbody").append(tr);
    });

    $("#table_dest .move-row").on("click", function() {
        var tr = $(this).closest("tr").remove().clone();
        tr.find(".move-row").text("+");
        $("#table_source tbody").append(tr);
    });
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<h3>1st Table:</h3>
<table class="table" id="table_source">
    <tbody>
        <tr>
            <td>Row</td>
            <td>1</td>
            <td><a href="#/" class='move-row'>+</a></td>
        </tr>
        <tr>
            <td>Another Row</td>
            <td>2</td>
            <td><a href="#/" class='move-row'>+</a></td>
        </tr>
    </tbody>
</table>

<h3>2nd Table:</h3>
<table class="table" id="table_dest">
    <tbody>
      <tr>
          <td>Row</td>
          <td>1</td>
          <td><a href="#/" class='move-row'>-</a></td>
      </tr>
    </tbody>
</table>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接