2017-10-06 54 views
5

Tôi đang sử dụng jQuery để chỉnh sửa XML. Vâng, tôi biết đó có lẽ là một ý tưởng tồi.Tại sao thẻ <constructor> dẫn đến 'không xác định' khi sử dụng jQuery replaceWith()?

Tôi đã gặp một số hành vi rất lạ (một lỗi?) Khi sử dụng thẻ xml <constructor>. Việc thay thế XML hiện tại bằng thẻ này sẽ dẫn đến việc thẻ được bao quanh bởi 'không xác định'.

$(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>

Mã này hoạt động tốt đối với bất kỳ thẻ khác tôi cố gắng. Cho đến nay chỉ có <constructor> dường như có vấn đề này.

Bất kỳ ý tưởng gì đang xảy ra? Đây có phải là vì jQuery có nghĩa là để xử lý HTML, chứ không phải XML? Bất kỳ cách giải quyết nào tôi có thể sử dụng?

+0

Âm thanh như một lỗi, vâng. Tôi đoán là họ sẽ làm một số loại 'var validTags = {" a ": true," span ": true, ...}' và '" constructor "trong validTags' là true. Nhưng vâng, bạn nên sử dụng chung một [trình phân tích cú pháp XML thích hợp] (https://developer.mozilla.org/en-US/docs/Web/Guide/Parsing_and_serializing_XML) – Bergi

Trả lời

2

Sự cố của bạn xuất hiện khi thay thế xml object bằng xml string. Bạn nên thay thế xml object bằng 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>

Các vấn đề liên quan