使用jQuery replaceWith()时,为什么标签<constructor>导致'undefined'?

时间:2017-10-06 08:27:46

标签: javascript jquery html xml

我正在使用jQuery来编辑XML。是的,我知道这可能是一个坏主意。

使用xml标记<constructor>时,我遇到了一些非常奇怪的行为(一个错误?)。用此标记替换现有XML会导致标记被“未定义”包围。

$(document).ready(function(){
    var my_xml = $.parseXML("<document><old>original xml</old></document>");
    var new_xml_string = '<constructor>Foobar</constructor>';
    var old_node = $(my_xml).find('old');
    old_node.replaceWith(new_xml_string);
    var my_xml_string = (new XMLSerializer()).serializeToString(my_xml);
    console.log(my_xml_string);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

此代码适用于我尝试的任何其他标记。到目前为止只有<constructor>似乎有这个问题。

知道发生了什么事吗?这是因为jQuery用于处理HTML而不是XML吗?我可以使用任何变通方法吗?

1 个答案:

答案 0 :(得分:2)

您的问题显示为将xml object替换为xml string。 您应该将xml object替换为xml object

$(document).ready(function(){
    var my_xml = $.parseXML("<document><old>original xml</old></document>");
    var new_xml= $.parseXML("<document><constructor>Foo</constructor></document>");
    var new_xml_const = $(new_xml).find('constructor');
    var old_node = $(my_xml).find('old');
    old_node.replaceWith(new_xml_const);
    var my_xml_string = (new XMLSerializer()).serializeToString(my_xml);
    console.log(my_xml_string);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>