2013-03-18 72 views
0

標題可能會引起誤解,但我會盡力解釋。for循環中動態更改ID屬性

我有一個Ajax函數可以獲取一些XML節點的值。現在我想用xml-nodes的值更改每個創建的元素的ID。

我有這樣的事情。 XML文件

<notes> 
    <note> 
     <text>Hello Dog</text> 
     <id>1</id> 
    </note> 
    <note> 
     <text>Hello Cat</text> 
     <id>1</id> 
    </note> 
</notes> 

現在呼叫我使用一個循環

stickers = myXML.getElementsByTagName("note"); 
for(i = 0; i < stickers.length; i++) { 
    var idNod = (stickers[i].getElementsByTagName("id")[0].childNodes[0].nodeValue); 
    var textNod = (stickers[i].getElementsByTagName("text")[0].childNodes[0].nodeValue); 
    add_sticker(idNod); 
    add_sticker(textNod); 
} 

// add_sticker()每一個文本節點是創建動態元素的功能...

所以輸出這將成爲

Note1 = Hello Dog id 1, 
Note2 = Hello Cat id 2 

但我想以某種方式使用idNod和我們Ë它作爲ID屬性 所以它會是這個樣子

<div id=1>hello dog</div> 
<div id=2>hello Cat</div> 

在循環我進入

stickers[i].setAttribute("id", idNod); 

但是這並沒有做任何事情,不是沒有給我一個錯誤。

+0

爲什麼使用setAttribute當你可以做'貼紙[i] .id = idNod;'? – 2013-03-18 15:11:24

+0

你可以顯示你的'add_sticker'功能嗎? – jcubic 2013-03-18 15:12:56

+2

除HTML5元素外,ID不能以數字開頭。 – 2013-03-18 15:13:19

回答

2

爲什麼你add_stickers被稱爲兩次,以創建一個元素的功能?你應該設計你的函數來獲取這兩個值並創建元素。

function add_sticker(idNod, textNod) { 
    var div = document.createElement("div"); 
    div.id = idNod; 
    div.innerHtml = textNod; 

    //Other parts 
}; 
1

我不知道add_cracker究竟是幹什麼的,所以我在黑暗中刺傷了一點點。我會創建一個經過idNod和textNod值,然後同時輸出所需的div

function addValues(id, text) { 
    var div = "<div id=\"" + id + "\">" + text + "</div>"; 

    //add code here to append the above div to whatever element you need it to go to. 
} 
+0

感謝您的幫助。 解決方案非常簡單...我只是加了 var id = idNod; 並且所有ID都更改爲正確的值。 :)謝謝無論如何:) – Dymond 2013-03-18 15:52:49