gpt4 book ai didi

javascript - jQuery Find() 和 XML 在 IE 中不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:40 24 4
gpt4 key购买 nike

我正在尝试使用 jQuery 来解析内存中的 XML 文档。这在除 IE(令人震惊的)以外的所有方面都很好用。一些谷歌搜索显示问题很可能是由于 IE 将我的文档视为 HTML 而不是 XML MIME 类型。

有没有办法让我的 jQuery 实现正常工作,或者我是否必须检查客户端浏览器并实现 IE 特定的 XML 解析?

谢谢!!

function getQAData(xmlData) {
var dataArr = new Array();
$(xmlData).find('item').each(function() {
dataArr.push({ questionid: $(this).attr("cellID"), answer: $(this).find('answer').text() });
});

return dataArr; // this array is nice and populated in everything but ie

XML 示例

    <hwroot>
<data pid="">
<item cellID="24_951">
<question>Are you there?</question>
<answer>No</answer>
</item>
<item cellID="24_957">
<question>A Question?</question>
<answer>blah blah blah</answer>
</item>
</data>
</hwroot>

解决方案:

由于下面@treeface 所述的原因,我的 jQuery .find() 解决方案将不起作用。这是我的解决方案:

基于导航器的分支JS代码:(

  if (browserName == "Microsoft Internet Explorer") {
MsXmlParse(xmlData, dataArr);

} else {
$(xmlData).find('item').each(function() {
dataArr.push({ questionid: $(this).attr("cellID"), answer: $(this).find('answer').text() });
});
}

MsXmlParse的定义

function MsXmlParse(xmlDocument, qarray) {
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = "false";
xmldoc.loadXML(xmlDocument);

var itemElements = xmldoc.getElementsByTagName("item");

for (var i = 0; i < itemElements.length; i++) {
var questionCellID = itemElements[i].getAttributeNode("cellID").nodeValue;
var answerTxt = itemElements[i].childNodes[1].text;

qarray.push({ questionid: questionCellID, answer: answerTxt });
}

}//结束msxmlparse

最佳答案

正如您在此处看到的那样,我对此没有任何问题:

http://jsfiddle.net/treeface/VuwcH/

我的猜测是,在 IE 中,您首先没有正确解析 XML 数据,但除非您向我们展示该 xmlData 变量的输出,否则无法判断。正如您在我的示例中看到的,您需要使用 DOMParser 以外的其他内容。对象以便在 IE 中正确解析 XML 字符串。你必须这样做:

xmlData = new ActiveXObject("Microsoft.XMLDOM");
xmlData.async = "false";
xmlData.loadXML(text); //where text is your XML string

编辑:

好的,这里的问题也是你的 xmlData对象是一串XML?您在您的帖子中提到它是“内存中的 XML 文档”,在这种情况下,它可以并且确实可以在 IE 中运行。据我从您的回复中可以看出,xmlData 实际上是一个字符串,这就是问题所在。 IE 是唯一在将不兼容的 HTML 放入 HTML 节点时遇到问题的主要浏览器。由于 jQuery 的 XML 解析器将提供的字符串包装在 div 中, 它在 IE 中崩溃了。 jQuery 认识到了这个错误,他们认为这是一个“无法修复”的问题。

问题在这里:http://bugs.jquery.com/ticket/3143

未修复的原因:检查此链接:http://api.jquery.com/jQuery#jQuery2 jQuery 构造函数只支持 html,不支持 xml。该字符串被刷新到一个 div 中,这可能是 IE 崩溃的原因。因为该字符串不是有效的 html。

特别是这一点:

When the HTML is more complex than a single tag without attributes, as it is in the above example, the actual creation of the elements is handled by the browser's innerHTML mechanism. In most cases, jQuery creates a new <div> element and sets the innerHTML property of the element to the HTML snippet that was passed in. When the parameter has a single tag, such as $('<img/>') or $('<a></a>'), jQuery creates the element using the native JavaScript createElement() function.

When passing in complex HTML, some browsers may not generate a DOM that exactly replicates the HTML source provided. For example, Internet Explorer prior to version 8 will convert all href properties on links to absolute URLs, and Internet Explorer prior to version 9 will not correctly handle HTML5 elements without the addition of a separate compatibility layer.

所以我怀疑他们“不会修复”它,否则所有其他浏览器都会变得草率。我不确定这个答案的准确性(或他们决定背后的逻辑质量),但事实就是如此。

所以...简而言之(为时已晚?)...不,没有简单的方法可以在一行中处理这个问题。话又说回来,也没有什么可以阻止您使用 JSON 而不是 XML。

关于javascript - jQuery Find() 和 XML 在 IE 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com