Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Цикл не отрабатывает до конца (https://javascript.ru/forum/misc/41270-cikl-ne-otrabatyvaet-do-konca.html)

diakon 06.09.2013 17:18

Цикл не отрабатывает до конца
 
Добрый день. Такая проблема. Есть таблица (ооочень большая) в которой я выводу первые 10 строк, а дальше ставлю класс
.hide_tab_pos{
display:none;
}
для всех элементов <td> таблицы (Поставить для tr не могу ввиду особенности структуры таблицы).
По нажатию на ссылку происходит событие oneclik и функция меняет для всех элементов с классом hide_tab_pos, значение display на inline.

<script type="text/javascript">
  function show_tabs() {
    var elements = document.getElementsByClassName('hide_tab_pos');
    for (i = 0; i < elements.length; i++) {
      elements[i].className = "inline";
    }
  }


.....

<a href="#" onclick="show_tabs(); return false " class="link-full-analog" >показать больше позиций</a>



Но есть такая проблема. Цикл который переберает все элементы и присваивает значения почему то не отрабатывает до конца и часть элементов остается скрытой. кто подскажет почему не отрабатывает цикл до конца? Заранее спасибо всем кто решит помочь!

diakon 06.09.2013 17:38

Кто знает почему может быть?

ruslan_mart 06.09.2013 18:08

Цитата:

Сообщение от diakon
display на inline.

Тогда это уже не таблица получается.

display: table-cell

Яростный Меч 06.09.2013 18:18

diakon,

а если так?
for (var i = elements.length-1; i >= 0; i--)

diakon 09.09.2013 09:10

Цитата:

Сообщение от Яростный Меч (Сообщение 271202)
diakon,

а если так?
for (var i = elements.length-1; i >= 0; i--)

Спасибо Вам! Так заработало!

Яростный Меч 09.09.2013 15:18

diakon,

суть в том, что методы вроде getElementsByClassName возвращают не массив, а "коллекцию DOM-элементов", которая следит за документом и самостоятельно меняется, чтобы всегда быть актуальной. В твоем случае из нее выпадали элементы, у которых ты менял класс (т.к. они более не соответствовали правилам, по которым собрана коллекция).


Часовой пояс GMT +3, время: 22:40.