2013-05-02 40 views
2

以下javascript代码无法正常工作。 (我使用IE9,并且不能使用不同的浏览器或JQuery的):更改className问题(javascript和IE)

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"; 

谢谢。

+0

可能的重复[如何可以替换一个类与所有元素,只使用DOM?](http://stackoverflow.com/questions/16510973/how-can-i-replace-one-class-与另一个所有元素使用只是这个dom) – Anonymous 2015-06-18 15:08:50

回答

4

getElementsByClassName似乎会返回一个活的集合,因此当您更改任何项目的类时,集合会立即更新,并且它会跳过每个其他项目。执行循环中,而不是相反:

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

好的一个!它的工作原理很清楚,为什么它不起作用。非常感谢。 – leoinlios 2013-05-02 10:33:16

0

另一种方法是:

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

你知道你不能错过的元素的方式。