我目前正在使用选择器解析 WMS 功能 XML 文件,这非常有效,干净的代码解决方案。
但是我偶然发现了 IE8 的一个问题 -(Chrome、Safari、Firefox 等都运行良好)
$.get(capabilitiesUrl, function (data) {
$("WMT_MS_Capabilities Capability Layer Layer Name", $(data)).not("Style Name").each(function (i) {
layerNames[i] = $(this).text();
});
});
这将在合适的浏览器中成功填充我的layerNames
数组。
在 IE9+ 中 data
是 [Object, Document]
但是在 IE8 中,data
的类型是 IXMLDOMDocument2
的类型,我无法使用选择器查询进行解析。
IXMLDOMDocument2
也是只读的,导致 sizzle 抛出异常:
outerCache = elem[ 扩展 ] || (elem[expando] = {});
因为它将尝试运行 elem[ Expando ] = {}
,但由于 IXMLDOMDocument2
是只读的而失败。出现对象不支持此属性或方法
错误。
有没有办法让我使用选择器填充我的 layerNames
数组,还是我在追求不可能的事情?
最佳答案
解决了这个问题。
如果您使用 .find()
而不是 find in
方法,它将在 IE8 中正确解析-
然后我仍然遇到 .not()
导致 sizzle
异常的问题。
我通过使用 :not()
选择器而不是使用 .not()
的 jQuery
API 来解决这个问题。
解决办法如下:
$(data).find("WMT_MS_Capabilities Capability Layer Layer Name:not(Style Name)").each(function (i) {
layerNames[i] = $(this).text();
});
关于javascript - 在 IE8 中使用选择器解析 XML-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15330002/