2016-12-01 5 views
0

Ну я положил tablerows с именем класса «ушедшим» в моем Html так:Javascript: getElementsByClassName не давая все элементы

<tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 
    <tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 
    <tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 
    <tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 
    <tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 
    <tr class="gone"> 
     <th>text</th> 
     <td>text</td> 
    </tr> 

и когда я получаю мои элементы в JavaScript с этим кодом:

var arrayelements=document.getElementsByClassName('gone'); 
var arrlength=arrayelements.length; 
for(var i=0;i<arrlength;i++){ 
    arrayelements[i].setAttribute("class","there"); 
    console.log(arrayelements); 
} 

возвращаемого значение моего console.log является

> <tr class="there">...</tr> 
> <tr class="there">...</tr> 
> <tr class="there">...</tr> 
> undefined 

в следующий раз я запустить его результат

> <tr class="there">...</tr> 
> <tr class="there">...</tr> 
> undefined 

я не понимаю, почему это вдруг неопределенными

+0

Человек, 'undefined' в порядке, coz, что бы вы ни делали, ничего не возвращает. Так оно и есть. Но позвольте мне попытаться воспроизвести. –

+0

Не должен ли console.log быть вне цикла? Или вы хотите зарегистрировать arrayelements [i] в ​​цикле? Или ваша цель состоит в том, чтобы все это шаг за шагом? –

+0

да, значит, элементы массива [i] ... – Beysinvader

ответ

3

HTMLCollection возвращаемый getElementsByClassName является ЖИВОЙ СПИСОК ... путем изменения класса, вы измените список во для цикла!

Одним из решений является «копией» список в массив

var arrayelements=Array.prototype.slice.call(document.getElementsByClassName('gone')); 
var arrlength=arrayelements.length; 
for(var i=0;i<arrlength;i++){ 
    arrayelements[i].setAttribute("class","there"); 
    console.log(arrayelements); 
} 

Другой метод должен был бы начаться в конце списка и работать в обратном направлении

var arrayelements=document.getElementsByClassName('gone'); 
var arrlength=arrayelements.length; 
for(var i=arrayelements.length-1;i>=0;i--){ 
    arrayelements[i].setAttribute("class","there"); 
    console.log(arrayelements); 
} 

или другой - всегда работает на первом элементе, видя, что вы всегда сокращаете длину

var arrayelements=document.getElementsByClassName('gone'); 
while(arrayelements.length) { 
    arrayelements[0].setAttribute("class","there"); 
} 

Я бы рекомендовал завершите первое, как проще всего работать, и избегайте последнего метода: p

+0

Теперь я получил это ... –

+0

спасибо, что это работает, они не сказали, что в школе, поэтому я был действительно смущен – Beysinvader

Смежные вопросы