在开发通过 xml 与后端服务对话的自定义应用程序时,我在 IE 11 中遇到了一个奇怪的问题。
奇怪的是,firefox 和 chrome 都能解析我收到的响应,但是 IE 失败了,我完全迷路了..
如果有人能看一看,我将不胜感激。
我将发布来自服务器的示例响应,xml 文档的简化版本,但您会明白的
<root>
<wizardhead>
<inputparametar/>
<outputparametar>69439</outputparametar>
<iserror/>
<repeaterror/>
<errormessage/>
<actionstorename>dbo.ncspWizardExec</actionstorename>
<wizardname>459570</wizardname>
</wizardhead>
</root>
解析该 xml 以提取特定用途的值的代码和平在这里:
window.ro = ro; // var ro is the source XML as string (saving to global var just for ease of testing)
var fnd = document.getElementsByTagName.bind( ro ); // bind 'gebtn' on ro document
var hdd = fnd('wizardhead')[0] ; // reference wizardhead WORKS
var hd2 = hdd.getElementsByTagName('outputparametar')[0].innerHTML; // this FAILS!
我在开发人员工具 (F12) 中看到的错误在线,我需要比较 hd2 值:
像这样 => ... (1 == hd2.toString() )
无法获取未定义或空引用的属性“toString”
devtools 中的 Watches 面板显示当前的环境变量就像..
hdd => [对象元素]
hd2 => 未定义
谢谢你
最佳答案
好吧,几天后..我找到了解决问题的方法!
希望这会帮助有类似问题的人:)
在这里阅读 w3c 文档:w3c docs我发现我可以通过两种方式引用元素..
element = collection.item(index)
element = collection[index]
所以我将它应用到我的代码中,例如这一行
var hd2 = hdd.getElementsByTagName('outputparametar')[0].innerHTML
这样调用:
var hd2 = hdd.getElementsByTagName('outputparametar').item(0).textContent
你看,它成功了:)
所以我猜 IE 在解析和引用成熟度指数 > 1 的子节点的方式上存在一些问题(因为它成功地解析了第一级!)但是在 dom 中不知何故遇到了一些权限问题..
好的,吸取教训,改用第二种方法,我们没有跨浏览器问题,至少现在:)
干杯,k
关于javascript - 在 IE 11 中解析 HTMLCollection 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402431/