JavaScript:搜索行中的字符串,如果找到字符串,则删除行
我想要一个脚本,删除单元格中找到的关键字字符串所在的每个表行,但我的脚本似乎删除了包含字符串关键字的所有其他行。显然,每次删除一行时,行的编号都会更新?怎么解释呢?提前谢谢JavaScript:搜索行中的字符串,如果找到字符串,则删除行,javascript,string,search,Javascript,String,Search,我想要一个脚本,删除单元格中找到的关键字字符串所在的每个表行,但我的脚本似乎删除了包含字符串关键字的所有其他行。显然,每次删除一行时,行的编号都会更新?怎么解释呢?提前谢谢 <script type="text/javascript"> var table = document.getElementById("DatePreferred").firstChild; var rowCount = table.rows.length; for(var i=0; i<rowCoun
<script type="text/javascript">
var table = document.getElementById("DatePreferred").firstChild;
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var text = row.cells[0].innerText;
if(text.indexOf("STRING")!=-1){
table.deleteRow(i);
}
}
</script>
删除一行时,只需使用
i--
减小i,这样您的for
循环就会重新检查相同的索引(现在将包含下一行)
编辑:再次查看代码后,您需要将
i
与表格.rows.length
进行比较,而不是将rowCount
变量与表格不断变化的长度进行比较。rows
当我需要这样做时,我喜欢反向工作:
for(var i= rowCount - 1; i >= 0; i--) {
var row = table.rows[i];
var text = row.cells[0].innerText;
if(text.indexOf("STRING")!=-1){
table.deleteRow(i);
}
}
+1、倒着一排一排地工作比在柜台上乱动要好。谢谢你,这样行得通!我会试着更好地理解这一点。基本思想是,当你从列表中删除某个内容时,它只会影响它后面的项目的索引,即索引更大的项目。如果您反向工作,那么您已经访问了那些索引较高的项目,并且您的循环对于尚未访问的索引较低的项目仍然有效。最后一个问题,是否有任何原因可以解释为什么这在IE和Safari中有效,而在FF中无效?我在FF中尝试了这个,但它不起作用,但对其他两个都起作用。对不起,我不知道为什么它在FF中不起作用。您是否尝试过FireBug()在FF中单步执行JavaScript?谢谢!如果我在if语句中加上“i--;”,这也行得通。@Usman虽然我很高兴它行得通,但我强烈建议您使用@FishBasketGordo提供的答案,因为它比我建议的要好得多。
for(var i= rowCount - 1; i >= 0; i--) {
var row = table.rows[i];
var text = row.cells[0].innerText;
if(text.indexOf("STRING")!=-1){
table.deleteRow(i);
}
}