【问题标题】:How to clone a XML node, change value inside it and append it without changing all nodes with jQuery?如何克隆 XML 节点,更改其中的值并附加它而不用 jQuery 更改所有节点?
【发布时间】:2017-03-10 10:47:32
【问题描述】:

我有一个 XML 文档,其中使用 xmldoc.find("main_node") 检索此特定节点:

<main_node>
   <rule_node>
     <rule_name>Default_rule</rule_name>
   </rule_node>
</main_node>

我正在尝试克隆 &lt;rule_node&gt; 节点,更改其中的 &lt;rule_name&gt; 节点值并将其附加到 &lt;main_node&gt; 节点之后,但我总是更改所有 &lt;rule_name&gt; 节点值。

我将默认的 &lt;rule_node&gt; 节点存储在变量名称 rule_xml 中,然后像这样执行克隆和值更改:

for (i=0; i < 3; i++) {
   $(rule_xml).clone().appendTo(sld.find("main_node")).find("rule_name").text("Rule_no" + (i+1))       
}

这会导致这个 XML 不正确:

<main_node>
   <rule_node>
     <rule_name>Rule_no2</rule_name>
   </rule_node>
   <rule_node>
     <rule_name>Rule_no2</rule_name>
   </rule_node>
   <rule_node>
     <rule_name>Rule_no2</rule_name>
   </rule_node>
   <rule_node>
     <rule_name>Rule_no2</rule_name>
   </rule_node>
</main_node>

我尝试过像这样使用 children() 函数,但它不起作用:

$(rule_xml).clone().children().find("rule_name").text("new_text_here")
.appendTo(sld.find("main_node"))

如何仅更改克隆节点的&lt;rule_name&gt; 节点文本?

【问题讨论】:

    标签: javascript jquery xml dom


    【解决方案1】:

    从您给出的结果来看,您当前的代码似乎在每次迭代时都会更新每个 rule_name 元素。但是,它们都编号为 2 有点奇怪——我希望它们都编号为 3(最后一次迭代为 2,规则编号为 i +1)。我刚刚测试了您的代码,但无法复制该问题。

    也许试试这个代码,看看它是否适合你:

    for (i=0; i < 3; i++) {
        //Clone the node
        var newNode = $(rule_xml).clone();
        //Update that individual node
        newNode.find("rule_name").text("Rule_no" + (i+1));
        //Now append that node
        newNode.appendTo(sld.find("main_node"))       
    }
    

    【讨论】:

    • 看起来这是来自 Visual Studio javascript 调试控制台的可视化错误。我正在通过键入“xml.find("main_node")[0]”查看更新的“main_node”,并且所有添加的节点都具有相同的 rule_name。但是当我离开调试会话并尝试相同的事情但使用 IE 调试器时,节点具有正确的“rule_name”值......
    • 我很高兴你明白了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多