Javascript jQuery正在删除未按预期工作的表行
我正在尝试从范围中删除包含名为item的类的表行TR 从示例中可以看出:Javascript jQuery正在删除未按预期工作的表行,javascript,jquery,Javascript,Jquery,我正在尝试从范围中删除包含名为item的类的表行TR 从示例中可以看出: <table id='theTable'> <tbody> <tr> <td>John</td> </tr> <tr class='item'> <td>Google</td> </tr>
<table id='theTable'>
<tbody>
<tr>
<td>John</td>
</tr>
<tr class='item'>
<td>Google</td>
</tr>
<tr class='item'>
<td>Microsoft</td>
</tr>
<tr class='item'>
<td>Apple</td>
</tr>
<tr>
<td>Obama</td>
</tr>
<tr class='item'>
<td>USA</td>
</tr>
</tbody>
</table>
所以约翰有3个项目:谷歌、微软和苹果。在另一边,奥巴马只有一个项目叫做美国
这就是说,这意味着John从0的位置开始,在3的位置结束,也就是item类结束的时候
我试图做的是删除TR,它的类项在范围内。所以如果我说我的start_索引从0开始,也就是John开始的位置,它应该从1删除到3
我的问题是只删除了项目的第一行
.这样就可以了。它将从表中删除所有具有类“item”的tr
$('#theTable tr.item').remove()
看看更新的,这应该满足你的需要
/*
The possibilities for the start_index are:
1) - John
2) - Obama
3) - Roma
*/
var start_index = 3
current_index = 0;
$("#theTable > tbody > tr").each(function() {
if($(this).hasClass('item') === false) {
current_index++;
} else if(current_index == start_index && $(this).hasClass('item')) {
$(this).remove();
}
});
您的条件稍有错误,您可以等待下一个元素并检查它,而不是检查嵌套条件的下一个内部。 另外,.each函数接受2个变量,一个用于索引,另一个用于值。 这是你的 为什么不直接使用 它可能需要一个选择器才能停止,所以只需传入您希望它通过同级,直到它们停止:没有class.item。然后整个事情缩小到-
var start_index = 1;
$("#theTable>tbody>tr").eq(start_index - 1).nextUntil(":not(.item)").remove();
但是,如果.item确实是与前一行相关的集合,那么如果将信息结构化为嵌套元素,则在语义上会更好
[编辑-尽管如果您只希望索引与非-项相关,请使用以下内容]
var start_index = 1;
$("#theTable>tbody>tr:not(.item)").eq(start_index - 1).nextUntil(":not(.item)").remove();
为什么不试试$theTable tr.item.remove可以更改HTML吗?如果是这样,我建议使用定义列表:JohngoogleMicrosoftAppledo您需要删除给定人名的行吗?还是对所有人?我说我需要删除一个范围内的tr。然后我说,如果我的开始索引从0开始,在本例中是John开始的位置,它应该删除所有带有类项目的tr,直到他找到一个没有类项目的tr。再次阅读问题。尝试一下,开始索引=3,这应该会删除roma的项目!!!start_索引不是“项目”索引,而是为约翰-奥巴马-罗玛这样的“家长”编制的。哦,对了,我没注意到,谢谢。我会马上修好的谢谢,但是@Klors的解决方案更干净。
var start_index = 1;
$("#theTable>tbody>tr:not(.item)").eq(start_index - 1).nextUntil(":not(.item)").remove();