#javascript
#javascript
Вопрос:
Я вложил два цикла for, как показано ниже. Но внутренний цикл останавливает внешний цикл при первом возникновении. При выполнении приведенный ниже код выдает только мою 13-ю строку в сером цвете, где ожидаемое поведение — увидеть 13-ю, 14-ю и 15-ю строки в сером цвете.
var rows = document.getElementsByTagName("tr");
for(var i = 0, max = rows.length;i < max; i )
{
var cells = rows[i].getElementsByTagName("td");
if (rows[i].cells[4].innerHTML == "Asset Removed")
{
for(var inner = 0, max = rows[inner].cells.length;inner < max; inner )
{
cells[inner].style.backgroundColor = "grey";
}
}
}
Есть идеи?
Комментарии:
1. Назовите
max
во внутреннем цикле что-то другое.2. @Kernel.. Это сработало. На самом деле я не замечаю эту переменную. Спасибо.
Ответ №1:
for(var i = 0, max = rows.length;i < max; i )
for(var inner = 0, max = rows[inner].cells.length;inner < max; inner )
max
Переменная во внутреннем цикле такая же, как и во внешнем цикле, следовательно, перезаписывает ее значения, что делает i < max
конечное условие ненадежным.
Ответ №2:
Вы используете одну и ту же переменную во внутреннем и внешнем циклах. in javascript last assigned value is taken by variable as final value
так что измените inner loop max variable to some another name
. попробуйте это.
var rows = document.getElementsByTagName("tr");
for(var i = 0, max = rows.length;i < max; i )
{
var cells = rows[i].getElementsByTagName("td");
if (rows[i].cells[4].innerHTML == "Asset Removed")
{
for(var inner = 0, max1 = rows[inner].cells.length;inner < max1; inner )
{
cells[inner].style.backgroundColor = "grey";
}
}
}
Я изменил переменную внутреннего цикла max
на max1