getElementByClass是否可以安全地在诸如getElementById之类的浏览器中使用?

时间:2009-05-22 21:43:46

标签: javascript dom

getElementByClass是否可以在getElementById等浏览器中安全使用?

更新的 目前正在使用:

 window.opener.document.getElementById

但我想通过classname引用该对象(该类名只有1个元素)。

5 个答案:

答案 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 DOMDocument Object Model Prototypes, Part 1: Introduction部分。

答案 3 :(得分:1)

如果你真的想要使用它,你可以在使用它之前测试验证对象是否支持getElementsByClassname,如果浏览器不支持它,则回退到函数的JS实现。

答案 4 :(得分:1)

我建议使用像prototype.js或jQuery这样的包装器库,它们都支持css选择器模型,并处理浏览器兼容性问题(IE6-7通常是更大的问题)