Внутренний цикл Javascript останавливает внешний цикл при первом возникновении

#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