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("&lt;EDO_A /&gt;").documentElement; 并且添加这样的子元素没有问题 $(domA ).append($.parseXML('&lt;EDO_Child /&gt;').documentElement); 但是当我有另一个对象例如 var domB = $.parseXML("&lt;EDO_B /&gt;").documentElement; 我不知道如何将它添加到 domA 。我试过$(domA ).append(domB);$(domA ).append($.parseXML(serializer.serializeToString(domB);).documentElement); 其中serializervar 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("&lt;EDO_A /&gt;").documentElement; 创建元素

$(domA ).append($.parseXML('&lt;EDO_Child /&gt;').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 元素

jquery 是不是区分大小写

是否有一个不区分大小写的jQuery:包含选择器?

是否有不区分大小写的 jQuery :contains 选择器?

.append 之后的 jQuery 函数

用jquery创建的元素属性为啥大写都变小写了