2017-10-06 2 views
5

私はXMLを編集するためにjQueryを使用しています。はい、それはおそらく悪い考えです。jQuery replaceWith()を使用すると、タグ<constructor>が「未定義」になるのはなぜですか?

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がXMLではなくHTMLを処理するためのものなのですか?私が使用できる回避策はありますか?

+0

はい、バグのようですね。私の推測では、 'var validTags = {" a ":true、" span ":true、...}'と '" constructor in in validTags'が真であると思います。しかし、ええ、あなたは一般的に[適切なXMLパーサ](https://developer.mozilla.org/en-US/docs/Web/Guide/Parsing_and_serializing_XML) – Bergi

答えて

2

xml objectxml stringに置き換えて問題が表示されます。 xml objectxml 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>

関連する問題