JavaScript: поиск строки в строке и удаление строки, если строка найдена - PullRequest
2 голосов
/ 05 июля 2011

Мне нужен скрипт, который удаляет каждую строку таблицы, для которой в ячейке найдено ключевое слово STRING, но мой скрипт, похоже, удаляет все остальные строки, содержащие ключевое слово STRING.Видимо, каждый раз при удалении строки нумерация строк обновляется?Как один счет для этого?Заранее спасибо.

<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>

Редактировать: Итак, ответ FishBasketGordo заставил мой скрипт работать для IE и Safari, но он не работал в FF.Я посмотрел, где ошибка, и, очевидно, FF обрабатывает .innerText по-разному.Вместо этого вы должны использовать .textContent.Поэтому, если вы добавите это ниже в скрипт выше, он будет использовать соответствующий метод:

if (row.cells[0].textContent){
   var text = row.cells[0].textContent;}
else {var text = row.cells[0].innerText;}

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Когда мне нужно сделать что-то подобное, мне нравится работать в обратном направлении:

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);
    }
}
0 голосов
/ 05 июля 2011

Просто уменьшите значение i, используя i-- при удалении строки, чтобы ваш цикл for повторно исследовал тот же индекс (который теперь будет содержать следующую строку).

РЕДАКТИРОВАТЬ: Посмотрев на ваш код еще раз, вы захотите сравнить i с table.rows.length вместо вашей переменной rowCount, чтобы учесть изменение длины table.rows.

...