2

以下 javascript 代码无法正常工作。(我使用的是 IE9,不能使用其他浏览器或 JQuery):

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

发生的情况是,只有类名“EditableTextBox”的一些元素被更改为类名“零”,许多元素仍保留类名“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";

谢谢你。

4

2 回答 2

5

似乎返回了一个活动集,因此当您更改任何项目的类时,该getElementsByClassName集会立即更新,并且会跳过其他项目。改为反向循环:

for (var i = elems.length - 1; i >= 0; --i) {                
    elems[i].className = "Zero";
}
于 2013-05-02T10:20:25.877 回答
0

另一种选择是:

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

这样你就知道你不能错过任何一个元素。

于 2014-07-28T23:47:58.130 回答