Строго отрабатывая код, размещенный в данный момент, вот проблемы, которые я вижу:
Опубликованный код выглядит неполным.Где инициализируется rows
?Это может вызвать указанную ошибку.
Учитывая while(j--)
;Неверная строка var j = rows.length - 1;
.То есть , если только вы не знаете, что последнюю строку никогда не нужно будет удалять.Но если это так, то закомментируйте код, чтобы прояснить его.
Например, если было 4 строки, текущий код инициализирует j
3, но из-за расположения --
оператор, внутри цикла видит: 2, 1, 0. Для кода, как показано, используйте var j = rows.length;
или добавьте комментарий, чтобы показать, что логика преднамеренная.
Операторы 2 if()
вообще не зависят от j
!(По крайней мере, поскольку код размещен здесь.) Если это так, переместите условные выражения за пределы цикла j
.
Рассмотрите возможность размещения полного неотредактированного кода.Или ссылка на него на сайте, например Pastebin .
Обновление для полного скрипта, теперь, когда он связан с:
Сканируя полный код, похоже, что tables[i].deleteRow(j);
можно вызывать несколько раз для одной и той же строки.
Самое простое решение, которое следует сделать в любом случае, это добавить continue
оператор после каждой строки удалить.
Для дополнительного кредита, повторно проанализируйте и упростите флаг, а также if
логику.:)
Обновление для целевой страницы, теперь, когда она связана с:
При проверке целевой страницы таблицы, зацикленные этим сценарием, содержат вложенные таблицы.
Это отбрасывает количество строк в этой строке:
var rows = tables[i].getElementsByTagName("tr");
Иногда создается впечатление, что таблица [i] имеет больше строк, чем она имеет непосредственно.
Решение, использовать встроенный массив строк;поэтому строка выглядит следующим образом: var rows = tables[i].rows;
~~~~
При рассмотрении сценария относительно целевой страницы, некоторые другие проблемы казались очевидными:
Не лучше перебирать все таблицы.Нацеливайтесь только на те, которые вам нужны.Итак, это:
tables = document.getElementsByTagName("table");
Должно быть изменено на:
var tables = document.querySelectorAll ("div.KonaBody > table.roundy");
..., которое выберет только 4 таблицы полезной нагрузки, а не их подтаблицы или другие разбросанные таблицыо.
При точной настройке начального выбора таблицы следующий пробламатический тест не требуется:
if(tables[i].getAttribute("style").indexOf("border: 3px solid") != -1)
- Отсутствует
var
inпередняя часть majorSections
инициализации.