jQuery .append()方法大小写敏感的元素问题

4

你好,我需要从表单数据创建xml并将其发送到webservice。问题在于.append()不区分大小写,因此.append('<EDO />')将创建<edo>。但是xml区分大小写,所以有什么办法可以解决这个问题吗?我选择使用domObject而不是字符串,因为这样我不必编写endtags,在我的情况下非常困难。

4个回答

6

尝试使用 $.parseXML() 创建 XML 元素:

yourObject.append($.parseXML("<EDO />").documentElement);

谢谢,看起来可以用,但是我遇到了另一个问题。我创建了元素 var domA = $.parseXML("<EDO_A />").documentElement; 并且添加子元素也没有问题,例如 $(domA).append($.parseXML('<EDO_Child />').documentElement); 但是当我有另一个对象,例如 var domB = $.parseXML("<EDO_B />").documentElement; 我不知道如何将其添加到 domA 中。我尝试过 $(domA).append(domB); 或者 $(domA).append($.parseXML(serializer.serializeToString(domB));.documentElement); 其中 serializervar serializer = new XMLSerializer(); 但是都不能行。 - m3div0
@david,当您尝试$(domA).append(domB)时,您收到了什么错误信息? - Frédéric Hamidi
抱歉,我犯了一个错误,我只写了$.而没有写$.parseXML,所以domA是一个错误的对象,它不能正常工作。现在$(domA).append(domB)可以完美地工作了,我发现domA.appendChild(domB)也可以工作。唯一的问题是哪个更快。 - m3div0
1
@david,appendChild()可能更快,因为append()是基于appendChild()实现的。不过最好还是进行一些测量 :) - Frédéric Hamidi

4

jQuery.parseXML总是会创建一个新的DOMParse和一个新的Document,因此它非常消耗资源。

更好的方法是使用(不太直观的)parseHTML,并使用context参数:

// Create the context XML document; doc and $doc is reusable
var doc = (new DOMParser()).parseFromString( '<root/>', 'text/xml' ); 
var $doc = $( doc.documentElement )

// Create case-sensitive XML element;
// this will call doc.createElement( 'EDO' ), as of jQuery 2.1.3
$doc.append( $.parseHTML( '<EDO />', doc ) ); 

4

最后,就如@Frédéric Hamidi所说,为了制作大小写敏感的XML,我使用了以下函数:

var domA = $.parseXML("<EDO_A />").documentElement; 用于创建元素

$(domA ).append($.parseXML('<EDO_Child />').documentElement); 用于添加来自字符串的子元素

$(domA).append(domB) 或者 domA.appendChild(domB) 用于添加子对象


0

注释:

$.parseHTML("<AddPerson>Adel</AddPerson>"); //result: <addperson>Adel</addperson>

$.parseXML("<AddPerson>Adel</AddPerson>"); //result: <AddPerson xmlns="">Adel</AddPerson>

我猜你需要这些代码:

var request = $.parseXML(HtmlOrXmlStringSource);
$(request).find(someElementInside).append(HtmlOrXmlStringSource_2);

//Serialize XML
var oSerializer = new XMLSerializer();
request = oSerializer.serializeToString(request);
request = request.replace(new RegExp(' xmlns=""', "igm"), "");

现在请求已准备好通过 $.ajax() 发送;
谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接