删除父元素和所有子元素

时间:2013-02-03 05:52:47

标签: javascript jquery html css

所以我有一个表,每次提交按钮时,它会向表中添加一行4列,我在每行放置一个删除按钮。我的目的是能够删除整行,但是当我按下它时它只删除按钮。如何删除整行?

$(this).parent().remove()

我试过这个但它不起作用,td直接在tr中,所以它应该访问tr并删除它但行仍然存在。

3 个答案:

答案 0 :(得分:4)

您想要选择最接近的tr元素,而不是直接的父元素。如果没有看到您的事件绑定,我认为$(this)是按钮,而$(this).parent()<td>。相反,你应该尝试:

$(this).closest('tr').remove();

或者,如果您可以保证tr>td>button的特定层次结构,那么您可以使用:

$(this).parent().parent().remove();

强烈反对使用后一种格式,因为它与HTML的结构紧密耦合。如果您的HTML开头为:

<tr>
    <td>
        <button>Example</button>
    </td>
</tr>

以后更改为:

<tr>
    <td>
        <div class="wrapper">
            <button>Example</button>
        </div>
    </td>
</tr>

使用closest('tr')将继续有效,但使用parent().parent()将会中断。


关于未发生事件的次要问题。如果您将事件与$('.foo button').click(removeRow);绑定(其中.footable元素匹配),则事件将不适用于新创建的button元素。相反,您应该使用on的事件委派形式(如果您使用的是旧版本的jQuery,则只需delegate):

$('.foo').on('click', 'button', removeRow);

这会将事件绑定存储在table元素上,当调用回调时,它会检查触发指定事件的元素是否与第二个参数中指定的选择器匹配(在这种情况下) 'button')如果匹配,则触发指定的处理程序(在本例中为removeRow)in匹配的元素作为上下文(在处理程序中,this仍将指向{{ 1}}元素)。

答案 1 :(得分:1)

  $(this).closest('tr').remove();

答案 2 :(得分:0)

我假设您的代码如下所示:

<table>
    <tr>
        <td>Column</td>
        <td><button></button></td>
    </tr>
</table>

因此,您的$(this).parent()<td>,而不是<tr>。您需要另一个parent()

$(this).parent().parent().remove();