在for循环中动态更改ID属性

时间:2013-03-18 15:09:42

标签: javascript

标题可能会产生误导,但我会尝试解释。

我有一个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);

但那没有做任何事情,也没有给我一个错误。

2 个答案:

答案 0 :(得分:2)

为什么你的add_stickers被调用两次来创建一个元素?您应该设计函数以获取两个值并创建元素。

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

    //Other parts
};

答案 1 :(得分:1)

我不知道add_stickers到底是做什么的,所以我只是在黑暗中刺了一下。我将创建一个传递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.
}