jquery .append() 区分大小写的元素
Posted
技术标签:
【中文标题】jquery .append() 区分大小写的元素【英文标题】:jquery .append() case sensitive element 【发布时间】:2015-04-08 17:23:12 【问题描述】:您好,我需要从表单中的数据创建 xml 以将其发送到 Web 服务。问题是.append()
不区分大小写,所以.append('<EDO />')
将创建<edo>
。但是xml是区分大小写的,那么有没有办法解决这个问题呢?而且我选择使用 domObject 而不是 string,因为这样我就不必编写 endtags,这在我的场景中会非常困难。
【问题讨论】:
【参考方案1】:尝试使用$.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);
其中serializer
是var serializer = new XMLSerializer();
但它不起作用
@david,当您尝试$(domA).append(domB)
时收到什么错误消息?
对不起,我犯了一个错误,而不是 $.parseXML
,我只有 $.
,而不是 domA
是坏对象,它没有工作。现在$(domA).append(domB)
可以完美运行,我发现domA.appendChild(domB)
也可以。唯一的问题是什么更快
@david, appendChild()
可能更快,因为append()
是根据appendChild()
实现的。不过,测量永远不会有坏处:)【参考方案2】:
最后正如@Frédéric Hamidi 所说,为了使xml 区分大小写,我使用了这些函数:
var domA = $.parseXML("<EDO_A />").documentElement;
创建元素
$(domA ).append($.parseXML('<EDO_Child />').documentElement);
从字符串中添加子项
$(domA).append(domB)
或domA.appendChild(domB)
添加子对象
【讨论】:
【参考方案3】: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】:注意事项:
$.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() 发送请求了;
谢谢
【讨论】:
以上是关于jquery .append() 区分大小写的元素的主要内容,如果未能解决你的问题,请参考以下文章
:: jQuery :: 将元素附加为区分大小写和非标准的 html 元素