getElementByClass是否可以在getElementById等浏览器中安全使用?
更新的 目前正在使用:
window.opener.document.getElementById
但我想通过classname引用该对象(该类名只有1个元素)。
答案 0 :(得分:9)
getElementsByClassName
不是可靠的跨浏览器。根据{{3}},目前最新版本的Firefox,Opera,Safari和Chrome都支持它,但在Internet Explorer或Konqueror中根本不支持。
如果您想跨浏览器使用它,则必须为那些不支持它的浏览器提供您自己的实现,Quirksmode:
function getElementsByClassName(node,classname) {
if (node.getElementsByClassName)
return node.getElementsByClassName(classname);
else {
// your custom function
}
}
答案 1 :(得分:2)
IIRC,getElementsByClassName
在Firefox 3,Safari 3.1中引入,并且从一开始就在Chrome中。我不知道它是否/何时被添加到Opera,但它根本不存在于Internet Explorer中。 (虽然可以通过扩展DOM原型将其添加到IE8中;请参阅Grant's answer。)
换句话说,如果你想要一个跨浏览器getElementsByClassName
,你需要自己动手或使用框架。
答案 2 :(得分:2)
正如其他人所提到的,Internet Explorer中没有getElementsByClassName
。
有关如何在IE中实现该功能的信息,请参阅Customizing the DOM的Document Object Model Prototypes, Part 1: Introduction部分。
答案 3 :(得分:1)
如果你真的想要使用它,你可以在使用它之前测试验证对象是否支持getElementsByClassname,如果浏览器不支持它,则回退到函数的JS实现。
答案 4 :(得分:1)
我建议使用像prototype.js或jQuery这样的包装器库,它们都支持css选择器模型,并处理浏览器兼容性问题(IE6-7通常是更大的问题)