Javascript 对GetElementsByTagnames的浏览器支持
哪些浏览器/版本支持GetElementsByTagnames(),支持的程度如何?我似乎找不到好的推荐人 [编辑]我对完整的参考很感兴趣,但我现在需要的是从AJAX调用返回的带名称空间的xml(顺便说一句,jQuery似乎无法处理该调用)。您看了吗 具体来说,Firefox从1.5版开始,Safari从3版开始,Opera从9版开始 低于3.6的Firefox版本进行了不区分大小写的搜索,结果如下所示 从IE9开始支持它。但是,这仅适用于HTML文档。我不确定您是否真的不能信任Dottoro,因为按名称空间选择对HTML文档没有任何意义。 如果不支持Javascript 对GetElementsByTagnames的浏览器支持,javascript,xml,dom,cross-browser,Javascript,Xml,Dom,Cross Browser,哪些浏览器/版本支持GetElementsByTagnames(),支持的程度如何?我似乎找不到好的推荐人 [编辑]我对完整的参考很感兴趣,但我现在需要的是从AJAX调用返回的带名称空间的xml(顺便说一句,jQuery似乎无法处理该调用)。您看了吗 具体来说,Firefox从1.5版开始,Safari从3版开始,Opera从9版开始 低于3.6的Firefox版本进行了不区分大小写的搜索,结果如下所示 从IE9开始支持它。但是,这仅适用于HTML文档。我不确定您是否真的不能信任Dottoro,
getelementsbytagnames
,您应该能够使用XPath。但是,由于IE不支持标准API,因此需要包装器——请参阅和,以获取如何让IE合作的提示。或者请求微软的支持
我建议,当您计划在网页的DOM上使用该函数时,确保XHTML文档实际上已使用XML内容类型
Chromium 14也支持该方法(与旧的Safari版本相比,它尊重名称空间)。支持可能已经在很久以前,我只是不知道最早的铬/铬版本的支持
除了IE之外,似乎所有的浏览器都支持。如果存在问题,请使用XPath替换对
GetElementsByTagnames
的调用。有关浏览器支持的介绍和说明,请参阅。我知道这是一个老版本,但可能对某些人有用。您只需在IE中使用普通的旧getElementsByTagName
,而不是调用node.GetElementsByTagnames('someNamespace','someNodeName')
,调用node.getElementsByTagName('someNamespace:someNodeName')
或使用以下垫片:
var getElementsByTagNameNS = function(node, ns, tagName) {
if (node.getElementsByTagNameNS) {
return node.getElementsByTagNameNS(ns, tagName);
}
return node.getElementsByTagName(ns + ':' + tagName);
};
这样称呼它:
getElementsByTagNameNS(someNode, 'someNamespace', 'someNodeName');
是的,参考资料过期了。您的编辑使它成为一个不同的问题。您的目标应该是在响应上使用XPath。看和。确保使用XML内容类型发送AJAX响应,并使用
responseXML
属性获取XML DOM。我使用responseXML。我可以使用xpath,但您的第三份参考资料中说:“默认情况下,Internet Explorer的xpath引擎不支持名称空间”?有趣的链接,不幸的是,当我遵循参考资料时,我没有得到更多详细信息。Sitepoint和Dottoro,这是我到目前为止得到的(并同意您的评论)。您是否有Chrome/Safari的链接?请注意,在上面的示例中,ns
应该是名称空间名称而不是URI,但写了这篇文章后,我意识到Firefox实际上只接受URI,因此更好的选择可能是使用node.getElementsByTagName('namespacename:tagname'))
在整个代码中。另一种选择是使用星号通配符代替URI(可能未知)。因此,您可以使用以下命令修改垫片:return node.getElementsByTagnames('*',tagName.split(':').pop());在实践中,这很好,但它不是一个通用的解决方案,因为它不处理名称空间冲突。不管怎么说,我只是想扔掉这个,以防它能帮助别人。