所以我有一个表,并且每次按钮被提交时,它将向表中添加一行4列,我在每行放置一个删除按钮。我的目的是能够删除整行,但是当我按下它时,它只会删除按钮。我怎样才能删除整行?删除父元素和所有的孩子
$(this).parent().remove()
我试过,但它不工作时,TD就直接在TR内,所以应该访问TR,并删除它,但该行仍然存在。
所以我有一个表,并且每次按钮被提交时,它将向表中添加一行4列,我在每行放置一个删除按钮。我的目的是能够删除整行,但是当我按下它时,它只会删除按钮。我怎样才能删除整行?删除父元素和所有的孩子
$(this).parent().remove()
我试过,但它不工作时,TD就直接在TR内,所以应该访问TR,并删除它,但该行仍然存在。
您想要选择最接近的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);
(其中.foo
与table
元素匹配)绑定事件,则该事件不适用于新创建的button
元素。相反,你应该使用的on
事件委托的形式(或者干脆delegate
,如果您使用的是旧版本的jQuery):
$('.foo').on('click', 'button', removeRow);
这将存储事件的table
元素绑定,当回调被调用时,它会检查触发指定事件的元素是否与第二个参数中指定的选择器匹配(在本例中为'button'
),如果匹配,它会触发指定的处理程序(在此例中为removeRow
)与匹配的元素作为上下文(在处理程序中,this
仍然会指向button
元素)。
$(this).closest('tr').remove();
我假设你的代码看起来是这样的:
<table>
<tr>
<td>Column</td>
<td><button></button></td>
</tr>
</table>
所以,你$(this).parent()
是<td>
,而不是<tr>
。您需要另一个parent()
:
$(this).parent().parent().remove();
向我们展示更多代码。但我怀疑你在按钮的点击事件上添加了这个。如果是这样,按钮的父母是TD,它正在被删除,对吧? – mrunion
正确,我发现问题只是我没有意识到我把它放在一个td也...愚蠢的错误 – Jupiter