2013-05-02 39 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'; 
} 

你知道你不能錯過的元素的方式。