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);
    }
}