2017-10-06 55 views
5

我正在使用jQuery来编辑XML。是的,我知道这可能是一个坏主意。为什么使用jQuery replaceWith()时,标记<constructor>会导致“未定义”?

当使用xml标签<constructor>时,我遇到了一些非常奇怪的行为(一个bug?)。用这个标签替换现有的XML会导致标签被'undefined'包围。

$(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?我可以使用任何解决方法?

+0

听起来像一个错误,是的。我的猜测是他们会在validTags中做某种'var validTags = {“a”:true,“span”:true,...}和'“构造函数。但是,你应该通常使用[正确的XML解析器](https://developer.mozilla.org/en-US/docs/Web/Guide/Parsing_and_serializing_XML) – Bergi

回答

2

您的问题显示为用xml string代替xml object。 您应该用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>

相关问题