IE 8 JQuery .find()不处理XML字符串

JQuery似乎无法在返回的XML字符串中找到我的选择器字符串。 它似乎在Chrome中运行,但由于浏览器身份validation问题,我无法在同一环境中进行调试。

我知道过去曾问过这类问题,但我没有找到任何具体适用于我情况的问题。

从SOAP请求提供以下XML响应; 我相信<z:row piece是重要的:

 "           

以下例程旨在迭代此响应并查找关联值。 它完全无法执行,就像xData.XML是空的一样(我也试过xData.xml – 没有变化)。

 $(xData.XML).find("z\\:row").each(function() { quantityOneArray[i] = parseFloat($(this).attr("ows_Quantity")); quantityTwoArray[i] = parseFloat($(this).attr("ows_Quantity2")); i++; alert("xData "+ i + ": "+xData.XML); }); 

这是一个带有几个手表的IE8调试器窗口截图的链接 。 xData.xml字符串突出显示。 这个断点紧跟在我上面的迭代程序之前。

  • 我的选择器格式不正确吗?
  • 我的选择器是否需要额外的逃脱?
  • 我在查看错误的返回值或对象吗?

我绝对是在拔头发。 我在Chrome中将选择器更改为“行”并且它可以正常工作; 在IE8中没有任何区别。

另外,请查看此博客文章以查看一个有效的示例。 最初我使用的是“xData.responseXML”,但它在调试器中显示为“Undefined”。

看起来你正在将一个xml字符串传递给$() ,这会导致jQuery将该xml字符串转换为HTML。 现代浏览器倾向于允许它并使用“新”html元素,而较旧的浏览器(IE6,7,8)会阻塞它们。

尝试使用

 var xmlDoc = $.parseXML(xData.XML); $(xmlDoc).find("z\\:row").each(... 

试试这个,

镀铬/火狐:

xml.children [0] .childNodes [1] .innerHTML

IE8 + / Safari浏览器:

xml.childNodes [0] .childNodes [1] .textContent

IE8:

xml.documentElement.childNodes [1]的.text;

示例代码在这里,

var xml = $ .parseXML(XMLDOC);

Var xmlNodeValue =“”;

if(userAgent.match(“msie 8.0”)){

xmlNodeValue = xml.children [0] .childNodes [1] .innerHTML;

} else {// IE8 +

xmlNodeValue = xml.childNodes [0] .childNodes [1] .textContent;

}