2014-09-30 88 views
1

我是初學者Javascripter,我想運行此腳本以隨機更改框的背景顏色。這是我的JS:無法設置包含節點的陣列項目的屬性

var divs = document.getElementsByClassName("col-sm-3"); 

var innDivs = []; 

colournumber = function() { 
return(Math.random().toString(16) + '000000').slice(2, 8); 
} 

for (i=0;i<divs.length;i++) { 
innDivs[i] = divs[i].getElementsByTagName("div"); 
innDivs[i].setAttribute("style","background-color:#"+colournumber()); 
} 

但我得到的錯誤,我不能在innDivs [i]上設置屬性。任何想法我如何做到這一點?

http://jsfiddle.net/w8gLqghz/

回答

0

getElementsByTagName給你一個元素列表。它們本身具有setAttribute方法。
您必須遍歷列表並設置每個單獨元素的屬性;

for (i=0;i<divs.length;i++) { 
    innDivs[i] = divs[i].getElementsByTagName("div"); 
    for (j=0;j<innDivs[i].length;j++) { 
     innDivs[i][j].setAttribute("style","background-color:#"+colournumber()); 
    } 
} 

http://jsfiddle.net/mowglisanu/w8gLqghz/5/

+0

這工作,但我不明白爲什麼我沒有。 innDivs [i]裏面有什麼? 它是一個多維數組嗎? – guru 2014-09-30 00:30:15

+0

'innDivs [i]'是一個['HTMLCollection'](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection),即html元素的集合。 HTMLCollection對象本身沒有'setAttribute'方法,爲了設置集合中元素的屬性,你必須公開每個單獨的元素,這在第二個for循環中完成。 – Musa 2014-09-30 00:42:48

0

彷彿你在調試程序看你會看到,innDivs是空的(你永遠不會把任何東西在裏面)。因此,innDivs[i]不存在。

您的意思是divs

+0

有'innDivs [I] = div的[I] .getElementsByTagName( 「DIV」);',但也許這是一個編輯。 – RobG 2014-09-30 00:53:34