2012-03-19 4 views
2

Я хочу выбрать, сколько div находится в моем html. поэтому я использовал метод .length, но это не дает мне желаемого результата. Вы можете посмотреть демо здесь http://jsfiddle.net/WbwuC/loop in javascript not working

<style> 

.main { width:980px; margin:0 auto; border:solid 1px #F00; overflow:hidden} 

.box { width:300px; float:left; margin-right:20px; background:#00F; height:200px;} 
.new {border:solid 2px #333;} 

</style> 


<script type="text/javascript"> 


    var amy= document.getElementsByTagName('div'); 

    for (i=0;i<amy.length;i++){ 
     var jar= amy[i]; 
     } 
    alert(jar) 


</script> 

</head> 

<body> 
<div id="main"> 
<div class="box"><h3>first</h3></div> 
<div class="box"><h3>secnond</h3></div> 
<div class="box"><h3>third</h3></div> 

</div> 

</body> 
+0

http://jsfiddle.net/WbwuC/1/ – PatrikAkerstrand

+1

Что такое желаемого результата? –

+0

результат должен быть 4 – Carlos

ответ

3

Если ваш скрипт запускается во время загрузки страницы, прежде чем дивы присутствуют, то не будет никаких дивы еще. Вы должны добавить событие загрузки страницы, чтобы вызвать код. Ваш jsfiddle работает btw ... у него включен onload для кода.

http://jsfiddle.net/EEjaP/

+0

спасибо, что он работает – Carlos

6

Это не работает, потому что в то время, когда сценарий выполняет документ не обрабатывается по дивы в организме. Попробуйте переместить скрипт под divs или дождаться события, загруженного документами.

0

Попробуйте эту

for (i=0;i<amy.length;i++){ 
     var jar= amy[i]; 
alert(jar) //put it here , ur problem will be solved 

     } 
//  alert(jar) //Dont put here 
0

Измените сценарий к этому:

<script type="text/javascript"> 
    var amy = document.getElementsByTagName('div'); 
    for (i = 0; i < amy.length; i++) { 
     var jar = i; 
    } 
    alert(jar)​; 
</script> 
0

Как вы хотите, чтобы результат 4, в соответствии с вашим осветляющий комментарий, самый простой способ заключается в использовании .length, как вы делаете в цикле в вашем собственном примере !, нет необходимости в цикле:

var length = amy.length; // Will return 4 

однако, если вы хотите, чтобы петли, вы можете использовать цикл вы представлены как это (очень ненужный, хотя, как вы можете использовать свойство длины, как и выше!)

var length = 0; 
for (i=0; i<amy.length; i++){ 
    length++; 
} 
// After the loop has run, length will have value 4 

Чтобы ваш код работал правильно, вам придется ждать с выполнением, пока DOM не будет готов.

Кроме того, для вашего предупреждения в вашем примере вы пытаетесь оповестить объект. Поскольку метод alert ожидает строку, он превратит ваш объект в его строковое представление [object htmlDivElement].

2

Работает demo. но на самом деле не понял, чего вы ожидали. Пожалуйста, найдите объяснение кода ниже.

var amy= document.getElementsByTagName('div'); 

Выше строки просто выбирает теги Div на странице HTML. Теперь текущий HTML содержит три DIV-тега, завернутые в основной DIV, т. Е. Всего 4 элемента DIV. Итак, первое предупреждение - «4».

for (var i=0;i<amy.length-1;i++){ 
     var jar= amy[i]; 
     alert(jar.innerHTML); 
}​ 

Этот код проходит через четыре тега DIV. innerHTML используется для отображения содержимого внутри этого div. Вы увидите, сначала весь блок DIV предупрежден. После этого каждый бит будет предупрежден.

Пожалуйста, дайте мне знать, это то, что вы хотели?

0

Попробуйте это -

.main { width:980px; margin:0 auto; border:solid 1px #F00; overflow:hidden} 

.box { width:300px; float:left; margin-right:20px; background:#00F; height:200px;} 
.new {border:solid 2px #333;} 

</style> 


<script type="text/javascript"> 

function count() { 
    var amy= document.getElementsByTagName('div'); 

    for (i=0;i<amy.length;i++){ 
     var jar= amy[i]; 
    } 
    alert(jar.className); 

} 


</script> 

</head> 

<body onload="count()"> 
<div id="main"> 
<div class="box"><h3>first</h3></div> 
<div class="box"><h3>secnond</h3></div> 
<div class="box"><h3>third</h3></div> 

</div> 
</body> 
1

вы можете просто использовать .length. Так же, как это ... jsFiddle

Чтобы убедиться, что ваш DOM полностью загружен, вы можете поместить скрипт просто в конце вашего html документа непосредственно перед закрывающим body в тег.

НТН,

--hennson