【问题标题】:cross-browser 'getElementsByTagName' with namespace from responseXML具有来自 responseXML 的命名空间的跨浏览器“getElementsByTagName”
【发布时间】:2013-07-03 10:31:46
【问题描述】:

我正在尝试使用 getElementsByTagName 读取 XML 响应:

var rows = items.responseXML.getElementsByTagName("z:row");

for (var i=0; i<rows.length; i++)
{
//do something
}

上面的代码在 Firefox 和 IE 中运行良好,但在 chrome 中它抛出 null .. 我的意思是它没有得到任何数据.. 当我 alert rows.length 它给我 0 总是在 chrome 中。

然后我在谷歌搜索并了解问题出在xsd:element,然后我将"z:row" 更改为仅"row"。然后它在 Chrome 中工作,但 Firefox 和 IE 返回 0rows.length

有什么方法可以跨所有浏览器吗?

【问题讨论】:

标签: javascript xml google-chrome xml-namespaces getelementsbytagname


【解决方案1】:

这是我用的:

function byTagNS(xml,tag,ns) {
    return xml.getElementsByTagNameNS
      ? xml.getElementsByTagNameNS(ns,tag)
      : xml.getElementsByTagName(ns+":"+tag);
}

在你的情况下:

byTagNS(responseXML, "row", "z")

【讨论】:

  • @Bergi 什么都没有!已更正。
【解决方案2】:

如果您不关心命名空间,那么您可以使用以下内容:

xml.getElementsByTagNameNS("*", "yourElementHere")

这将获取具有所需名称的任何元素,无论它具有哪个命名空间或是否有任何命名空间。此外,这应该可以在不同的浏览器中按预期工作。

See link for documentation.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多