как же всё-таки работает while
не пойму почему не работает while :(
такой незамысловатый скрипт выдаёт кол-во строк в таблице, включая заголовок.
var aaaa = document.getElementsByTagName('tr');
for (var j=0;j<aaaa.length;j++){}
alert (j);
а с while'ом не работает:cray:, браузер виснет:
var j = 0;
var aaaa = document.getElementsByTagName('tr');
while (aaaa){j++;}
alert (j);
|
|
Цитата:
alert(document.getElementsByTagName('tr').length);
Циклы для этого вообще не нужны. :no: |
ksa, laimas,
Да хрен с ним с кодом, я хотел бы разобраться с while'ом и можно ли while'ом, а не for перебрать полученную коллекцию элементов, скажем с тегом tr или td и т.д. |
atanov, можно
/*
Из рубрики «Как делать не нужно».
Подсчет кол-ва элементов массива.
*/
var i=0;
while(i++<aaaa.length){}
|
Цитата:
|
Nexus, да это моя проблема, наверное неправильно формулирую.
Главный вопрос - из описания тут https://learn.javascript.ru/while-for следует, что пока элемент в скобках есть, выполняется тело цикла. Дословно - "Условие в скобках интерпретируется как логическое значение, поэтому вместо while (i!=0) обычно пишут while (i)". Очевидно, что в моём случает переменная это объект и как этот объект проверить на true/false, чтобы выполнялось тело цикла? В php например, при переборке массива, который получен путём запроса sql, так сделать можно: while ($row['...']){...} |
Цитата:
Главное верно использовать пред или пост условие...
var j = 0;
var a = document.getElementsByTagName('tr');
while (a[j]){j++;}
alert (j);
|
Цитата:
А у вас что? Вы же даже не пытались запустить отладку, чтобы понять в чем у вас проблема, так ведь? Просто упорно веруете, что должно работать, хотя условием задано не понять что. |
Цитата:
|
Цитата:
Цитата:
Только ты так не стал делать. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
ksa вам просто подсказал, а надо было самому глянуть в консоль, и посмотреть, что aaaa, это коллекция, и для цикла булево значение ее всегда будет true, отсюда и бесконечный цикл. Если судить по аналогии с получением строк ресурса, то типа такого, хотя здесь возвращает false не за счет сдвига указателя в массиве, он всегда будет в конце его, а за счет того, что массив в конечном итоге будет пуст (вернется undefined):
<html>
<body>
<table>
<tr><td></td></tr>
<tr><td></td></tr>
<tr><td></td></tr>
</table>
<script>
var a, b = [].slice.call(document.querySelector('table').rows);
while(a = b.pop()) {
a.cells[0].innerHTML = 111;
}
</script>
</body>
</html>
Цикл while самый простой, но и медленный, в данном случае его можно заманить на более быстрый: for( ; a = b.pop() ; ) { } |
Цитата:
|
| Часовой пояс GMT +3, время: 16:06. |