在IE 11中解析HTMLCollection对象

时间:2014-12-10 13:37:56

标签: javascript internet-explorer dom xmldocument

我在IE 11中遇到一个奇怪的问题,同时开发通过xml与后端服务对话的自定义应用程序。

奇怪的是,firefox和chrome都可以解析我收到的响应,但IE失败了,我完全迷失了......

如果有人可以看看,我会非常感激。

我会发布来自服务器的示例响应,xml doc的cuted版本,但你会明白这个想法

<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 值:

喜欢这个=&gt; ......(1 == hd2.toString())

无法获取未定义或空引用的属性'toString'

devtools中的手表面板显示当前的env vars就像..

hdd =&gt; [对象元素]

hd2 =&gt;未定义

谢谢,oserk

1 个答案:

答案 0 :(得分:1)

好的家伙,一天后结束......我找到了解决问题的方法!

希望能帮助有类似问题的人:)

在此阅读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在解析和引用成熟度指数&gt;的子节点方面存在一些问题。 1(因为它成功解析了第一级!)但在某种程度上在dom中获得了一些权限问题..

好的,经验教训,使用第二种方法,而且我们没有跨浏览器问题,至少现在,至少:)

欢呼,k