javascript - 在IE 11中解析HTMLCollection对象

在开发通过xml与后端服务通信的自定义应用程序时,IE 11中出现一个奇怪的问题。

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

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

我将发布来自服务器的示例响应,即xml doc的简化版本,但是您会明白的

<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中的“监视”面板显示当前的环境变量是..

hdd => [对象元素]

hd2 =>未定义

谢谢,oserk


最佳答案:

好的,大家,几天后..我找到了解决我问题的方法!

希望能对遇到类似问题的人有所帮助:)

在这里阅读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内部却存在一些权限问题。

好的,经验教训,请改用第二种方法,到目前为止,至少没有跨浏览器问题:)

欢呼声

译文:来源   文章分类: javascript internet-explorer dom xmldocument

相关文章:

javascript - 这两种JavaScript模式之间有什么区别吗?

javascript - 检测屏幕分辨率以加载替代CSS是个好主意?

javascript - 更改另一个属性时的角度更新属性

javascript - 如何使用Bookshelf.js正确更新模型?

javascript - 我可以从其他文件中访问变量吗?

javascript - 按需导入模块组件

javascript - 使用Ajax从服务器获取React组件

javascript - Javascript将数据插入HTML表

javascript - 通过检查范围变量来过滤Angular.js

javascript - 防止Highchart重抽搐