【问题标题】:How to delete a parent tr如何删除父 tr
【发布时间】:2018-03-08 22:36:02
【问题描述】:

更新 1:

我想知道它是否与正在删除的元素内的按钮有关,所以它最终会删除也执行删除的按钮?这可能不是问题,我只是在输入我的想法。

我刚刚试过:

$( "input.btnX" ).click(function(event) {
    alert("test");
});

我没有收到警报...我现在应该使用live 还是on,因为按钮和表格是动态生成的。

原始问题:

我有一个表(动态生成的,所以我不知道它在 tbody 中有多少个 tr,看起来像这样:

<table>
    <tbody>
        <tr>
            <td>col1</td>
            <td>col2</td>
            <td><input type="button" class="btnX" name="x" value="x" /></td>
        </tr>
        <tr>
            <td>col1</td>
            <td>col2</td>
            <td><input type="button" class="btnX" name="x" value="x" /></td>
        </tr>
    </tbody>
</table>

如果单击 x 按钮,如何删除父 tr?所以在这个例子中,如果底部的 x 被点击,它应该移除底部的 tr。

我试过这个:

$( "input.btnX" ).click(function(event) {
    $(this).parent('tr').remove();
});

但什么也没发生。

【问题讨论】:

标签: jquery jquery-selectors


【解决方案1】:

随便用

    $( "input.btnX" ).click(function(event) {
    $(this).parent().parent().remove();
});

或者

  $( "input.btnX" ).click(function(event) {
        $(this).closest("tr").remove();
    });

因为你正在做的是去父母那里是 tr 然后寻找一个 tr

在此处查看示例http://jsfiddle.net/gYDUF/

如果您的表格是由 javascript 呈现的,您可能还需要更改您的点击

$("input.btnX" ).live(click, function(){

     $(this).closest("tr").remove();
}); 

【讨论】:

  • 对我来说工作得很好,看看添加的 jsfiddle 你是否准备好在文档中运行你的代码
  • 您的 jsfiddle 示例中有一个硬编码表,这是否适用于动态创建的表?
  • 查看新更新的最后一部分尝试将点击更改为 .live() 或使用 $(document).delegate(selector, events, data, handler);
  • 工作就像一个魅力,+1
【解决方案2】:

试试这个:

$( "input.btnX" ).click(function(event) {
    $(this).closest('tr').remove();
});

因为 tr 不是输入元素的直接父级。

编辑: 如果表格是动态构建的,请尝试使用

$( "input.btnX" ).live("click", function(event) {
    $(this).closest('tr').remove();
});

【讨论】:

    【解决方案3】:
    $( "input.btnX" ).on("click", function(event) {
        $(this).closest('tr').remove();
    });
    

    这应该可以完成工作并避免不推荐使用的“.live()”(如前所述)。

    另见jsfiddle

    【讨论】:

    • 参见jQuery .on()jQuery .live()(.live() 在 jQuery 1.7 中已弃用)
    • 我通过https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.json 使用jquery 1.7.2 对我不起作用,但live 可以。知道为什么吗?
    • 看看您发布的链接。这不是将.on() 用于委托事件的语法;您需要执行$(document).on('click','input.btnX', function() { ... }),其中document 也可以替换为绑定处理程序时存在的任何静态元素。
    • @nbrooks 好的,我忽略了该表是动态生成的。
    【解决方案4】:

    jQuery .live() 方法已被弃用,委托事件处理程序现在应使用.delegate()(对于旧版本)或.on()

    .on() 用于委托事件的语法是:

    $(document).on('click','input.btnX', function() {
        $(this).closest('tr').remove();
    });
    

    请注意,此处的document 也可以替换为绑定处理程序时存在的任何静态父元素(未来按钮的)。

    【讨论】:

      【解决方案5】:

      不确定是否更好,但我使用parents()...

      $('input.btnX').click(function() {
          $(this).parents('tr').remove();
      });
      

      【讨论】:

      • 这将删除 DOM 树上任何位置的所有 &lt;tr&gt; 元素的父元素——因此在嵌套表中,您将删除整个子表。 .closest() 获取最近的父级并仅定位它(它也不必遍历完整的 DOM 树)
      【解决方案6】:

      首先将id="btnX"改为class="btnX",因为id应该是唯一的。

      那么你可以这样做:

      $( "input.btnX" ).live(function(event) {
          $(this).closest('tr').remove();
      });
      

      【讨论】:

      • 你写的表是动态建的,是不是Javascript的意思?
      • 编辑了我的答案,是的,你应该使用 live,因为它是动态的
      【解决方案7】:

      首先感谢大家,我想分享并回馈我能够从这个线程解决的错误,我自己的解决方案版本:

      解决方案第 1 步:在我的设置中,使用“最接近”而不是父/父(也删除父,所以不适合我)对我有用:

      $("#container1").on('click','#remove',function(e) {
          $(this).closest("tr").remove();
      });
      

      解决方案第 2 步:因为它是 'tr',所以放置你的 javascript 参考 id [i.e. #container1],放在'table'上而不是'tr'上,否则会出现设计错误

          <table id="container1">
      

      解决方案第 3 步:别忘了在你的页面中激活 jquery:

          <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      

      【讨论】:

        【解决方案8】:
        $("input.btnX").live("click", function(event) {
            $(this).closest('tr').remove();
        });​
        

        这解决了您的问题,请参阅this jsFiddle,它表明它可以正常工作。

        这是一个update,显示它可以处理动态表

        【讨论】:

          猜你喜欢
          • 2011-08-26
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2018-05-03
          • 1970-01-01
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多