IE - JQuery 在 $.each 循环中向 XML 添加子节点

3

我遇到了一个问题,IE不能正确地附加或识别我尝试附加子节点到解析的XML字符串中。Chrome和Firefox理解我的意图。我不知道这是作用域问题还是IE和XML的行为。

var dataContainers = $('[data-container]');
var containerXML = $.parseXML('<inlineSubmission><userid>'+userID+'</userid><guid>'+GUID+'</guid><contentField><![CDATA[FlexXML]]></contentField><content><containers></containers></content></inlineSubmission>');

$.each(dataContainers,function (key,value) {
var containerID = $(value).attr('id'),
        isVisible = $(value).is(':visible'),
        xmlFragment;

xmlFragment = '<container><name>'+containerID+'</name><visible>'+isVisible+'</visible></container>';

$(containerXML).find('containers').append(xmlFragment);
});

console.log(containerXML)

Chrome 和 Firefox 都正确返回:

<inlineSubmission><userid>55555</userid><guid>22222-222-2-22-222</guid><contentField><![CDATA[FlexXML]]></contentField><content><containers><container><name>heroContainer</name><visible>true</visible><bgcolor>undefined</bgcolor><textcolor>undefined</textcolor><subitem><name>contactInfo</name><visible>none</visible><location>undefined</location></subitem></container><container><name>contentContainer</name><visible>true</visible></container><container><name>cnmContainer</name><visible>true</visible></container><container><name>accountAccessContainer</name><visible>true</visible></container><container><name>promoContainer</name><visible>true</visible></container><container><name>contactContainer</name><visible>true</visible></container></containers></content></inlineSubmission>

虽然IE返回的是原始变量值:

<inlineSubmission><userid>55555</userid><guid>22222-222-2-22-222</guid><contentField><![CDATA[FlexXML]]></contentField><content><containers /></content></inlineSubmission>

希望能得到您的帮助!


在你认为追加操作有问题之前,请先执行以下代码:console.log($(containerXML).find('containers').length) - Kevin B
此外,您似乎将HTML附加到XML文档中。IE可能不喜欢这样做。 - Kevin B
2个回答

1

终于让它运作起来了。感谢这些答案!他们给了我正确的方向可以前进:

var containerXML = $('<inlineSubmission><userid>'+userID+'</userid><guid>'+GUID+'</guid><contentField>FlexXML</contentField><content><containers></containers></content></inlineSubmission>');

$.each(dataContainers,function (key,value) {
var containerID = $(value).attr('id'),
    isVisible = $(value).is(':visible'),
    xmlFragment;

xmlFragment = $('<container><name>'+containerID+'</name><visible>'+isVisible+'</visible></container>')

$(containerXML).find('containers').append(xmlFragment);
});

var parsedXML = $.parseXML(containerXML[0].outerHTML);
console.log(parsedXML)

1
尝试将$(containerXML)替换为$(containerXML.documentElement)

$(containerXML) 返回 #document,具有document的上下文,例如;

$(document).append("<p>abc</p>")

不会将<p>abc</p>附加到<html><body>元素中,并可能返回错误:TypeError:无法读取null的属性'createDocumentFragment'

$(containerXML.documentElement)返回<inlinesubmission>元素,具有inlinesubmission的上下文。

var userID = "abc", GUID = 123, containerID = 456, isVisible = true;

var xmlFragment = '<container><name>'
                  +containerID+'</name><visible>'
                  +isVisible+'</visible></container>';

var containerXML = $.parseXML('<inlineSubmission><userid>'
                              +userID+'</userid><guid>'
                              +GUID+'</guid><contentField><![CDATA[FlexXML]]>'
                              +'</contentField><content><containers></containers>'
                              +'</content></inlineSubmission>');

console.log($(containerXML)
            , $(containerXML.documentElement).find("containers"));

$(containerXML.documentElement).find("containers").append(xmlFragment);

$("body").append($(containerXML.documentElement));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


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