我有一个AJAX请求,该请求返回我想注入DOM的XML字符串。我的功能看起来像
$.ajax({ type: 'POST', url: "myrequest", data: postdata, datatype: 'json', success: function (arguments) { newxmlstring = arguments.newxml; oldnode = $("someselector specified in the arguments passed"); oldnode.replaceWith(newxmlstring); } });
此方法有效,但似乎replaceWith函数将所有内容映射nodeName到服务器发送的响应的大写版本中。我假设尝试使用jQuery处理XML有点古怪吗?
nodeName
因此,例如,如果响应字符串是<data>asdf</data>在我访问时$(newnode)[0].nodeName得到的'DATA'。
<data>asdf</data>
$(newnode)[0].nodeName
'DATA'
有人知道如何在保留nodeName小写字母的同时处理新的XML 吗?
编辑:我的答复是JSON,因为它包含新的xml字符串和有关将新的xml节点附加到何处的其他数据。因此,我希望尽可能保留datatype: 'json'。
datatype: 'json'
:
在XML(以及基于XML的语言,例如XHTML)中,tagName保留大小写。在HTML中,tagName以规范的大写形式返回元素名称。tagName的值与nodeName的值相同。
一点搜索表明,很多人都遇到了这个问题,尤其是选择器和XML(jQuery的find()区分大小写,在find()中使用的选择器是小写的)。
这是其他人用来将字符串转换为可能适合您的XML 的函数:
$.text2xml = function(sXML) { // NOTE: I'd like to use jQuery for this, but jQuery makes all // tags uppercase //return $(xml)[0]; var out; try{ var dXML = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); dXML.async = false; }catch(e){ throw new Error("XML Parser could not be instantiated"); }; try{ if($.browser.msie) out = (dXML.loadXML(sXML))?dXML:false; else out = dXML.parseFromString(sXML, "text/xml"); } catch(e){ throw new Error("Error parsing XML string"); }; return out; }