jQuery - 在使用 append() 追加子节点时,在 Internet Explorer 11 中,附加的 xml 标记将转换为小写

jQuery - On appending child node using append()- appended xml tags are converted to lowercase in Internet Explorer 11

提问人:curiousCat 提问时间:7/16/2021 最后编辑:curiousCat 更新时间:7/21/2021 访问量:177

问:

问题陈述:

我正在尝试在IE浏览器中使用jQuery使用append()将子节点附加到父XML节点。 在尝试时,我发现 append() 不会向 XML 节点添加任何元素,并且子节点返回为空。

在故障排除时,我发现这是IE的已知问题,我在这里找到了这篇文章 - IE - JQuery在$.each循环中将子节点附加到XML

使用本文中建议的解决方案后,我现在能够将子节点附加到父节点。但是,子节点的 XML 标记都以小写形式附加,如下所示:

当前结果:

<Content>
     <ParentNode>
          <childrennode>
               <child1>true</child1>
               <child2>Hello</child2>
          </childrennode>
     </ParentNode>
</Content>

预期结果

<Content>
     <ParentNode>
          <ChildrenNode>
               <Child1>true</Child1>
               <Child2>Hello</Child2>
          </ChildrenNode>
     </ParentNode>
</Content>

var contentXML =('<Content><ParentNode></ParentNode></Content>');
var node = $.parseXML(contentXML)
var nodeXML = $(node).find('Content > ParentNode');
var value1 = true;
var value2 = "Hello";
var childNodeinIE = $('<ChildrenNode><Child1>' + value1 + '</Child1>'+ '<Child2>'+ value2 +'</Child2>'+'</ChildrenNode>');
nodeXML.append(childNodeinIE);
console.log($(nodeXML).find("Content > ParentNode > ChildrenNode").text());
console.log($(nodeXML).find("Content > ParentNode > childrennode").text());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>

我知道我也可以使用:

 $(contentXML).find("Content > ParentNode > ChildrenNode > Child1").text(value1);

但是,我想附加它,不想覆盖这些值。

有人可以建议如何保留预期结果中所示的XML标签吗?

JavaScript jQuery XML 解析 Internet-explorer-11

评论

0赞 ikhvjs 7/16/2021
嗨,你能先修复你的代码片段吗?我什么也没看到。
0赞 freedomn-m 7/16/2021
这回答了你的问题吗?我一直在使用jQuery来解析XML,但它不保持大写。我缺少一面旗帜吗?
0赞 curiousCat 7/16/2021
我已经更新了代码片段。该问题现在是可重现的。
0赞 curiousCat 7/16/2021
不幸的是,@freedomn-m,看起来建议的帖子中的解决方案适用于 Chrome,但不适用于 IE。:(
0赞 freedomn-m 7/16/2021
根据链接的答案:您已将第一个 contentXML 更改为 $.parseXML - 但您的第二个仍在由 jquery 解析为 HTML,因此将是小写的。由于您立即使用,因此它不需要是jquery对象,因此更改为(没有jquery解析为HTML)并且它可以正常工作。$('<ChildrenNode><Child1>' + value1.append(childNode)var childNodeinIE = '<ChildrenNode><Child1>'

答:

0赞 curiousCat 7/21/2021 #1

为了在IE中完成这项工作,我不得不使用appendTo()。

例如:

childNodeinIEXML = $($.parseXML(childNodeinIE)).find("ChildrenNode");
childNodeinIEXML.appendTo(nodeXML)