2013-05-02 1 views
2

Следующий код javascript работает неправильно. (Я использую IE9 и не может использовать другой браузер или JQuery):изменение классаName issue (javascript и IE)

var elems = document.getElementsByClassName("EditableTextBox"); 
for (var i = 0; i < elems.length; i++) {     
    elems[i].className = "Zero"; 
} 

Что происходит, только некоторые элементы с Classname «EditableTextBox» заменяются на Classname «Ноль», многие остаются с Classname «EditableTextBox». Дополнительного кода, который может вызвать эту проблему, не существует; этот код - это последний бит кода, который я выполняю до обновления экрана.

Я думал, что проблема была с .getElementsByClassName не находя все правильные элементы, однако:

var elems = document.getElementsByClassName("EditableTextBox"); 
for (var i = 0; i < elems.length; i++) {     
    elems[i].value = "test"; 
} 

этот код изменяет значение всех правильных элементов «тест», так .getElementsByClassName ДЕЛАЕТ найти все элементы правильно.

Я не понимаю, что вызывает здесь проблему. Мой путь вокруг этого ниже, но может ли кто-нибудь с большим опытом здесь объяснить, почему первый блок кода не работает? Спасибо.

Мой Обход в случае, если кто интересуется:

var elems = document.getElementsByTagName("input"); 
for (var i = 0; i < elems.length; i++) { 
    if (elems[i].className == "EditableTextBox") 
     elems[i].className = "Zero"; 

Спасибо.

+0

Возможный дубликат [Как заменить один класс другим на всех элементах, используя только DOM?] (Http://stackoverflow.com/questions/16510973/how-can-i-replace-one-class- with-another-on-all-elements-using-just-the-dom) – Anonymous

ответ

4

getElementsByClassName, кажется, возвращает живой набор, поэтому, когда вы меняете класс любого предмета, набор сразу обновляется, и он пропускает друг друга. Сделайте петлю обратного вместо:

for (var i = elems.length - 1; i >= 0; --i) {     
    elems[i].className = "Zero"; 
} 
+0

Nice one! это работает, и понятно, почему это не сработало. Огромное спасибо. – leoinlios

0

Альтернативы будет:

while(list.length!=0) { 
    list[0].className = 'Zero'; 
} 

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