JavaScript的getElementById
可以使用,我知道。但getElementsByClassName
怎么样?浏览器如何支持它?getElementsByClassName - 2012年可以安全使用?
通过谷歌,我发现各种自制的解决方案,它像this
正如你可以看到,这个帖子现在四岁了,这就是为什么我问。或者我应该只使用jQuery来处理那些可用的东西?
JavaScript的getElementById
可以使用,我知道。但getElementsByClassName
怎么样?浏览器如何支持它?getElementsByClassName - 2012年可以安全使用?
通过谷歌,我发现各种自制的解决方案,它像this
正如你可以看到,这个帖子现在四岁了,这就是为什么我问。或者我应该只使用jQuery来处理那些可用的东西?
第一关,您必须确定您需要支持哪个版本的IE:IE6,IE7,IE8?如果不知道这一点,我们无法真正提供最佳的选择。如果你所需要的只是IE9及以上(某些模式下也是IE8),那么你可以使用document.querySelectorAll(".classname")
或document.getElementsByClassName("classname")
。
如果你需要其他版本的IE,你不能走这条路。有getElementsByClassName()
垫片,少于30行代码可用于在旧版本的IE中提供支持,但在那一点上,我强烈建议你只是得到一个选择器库,它可以完成所有的跨浏览器支持你。这听起来像你已经熟悉有这样一个库的jQuery。如果你不想/需要jQuery的其余部分,你可以得到一个选择器库。 jQuery内部使用Sizzle,它本身都是可用的,而且非常好。还有其他人。
这是一个很好的资源,所以你可以自己查看浏览器兼容性:http://caniuse.com/getelementsbyclassname。
只需使用document.querySelectorAll(".classname")
IE 8支持它:http://www.caniuse.com/#search=queryselectorall
我写了一个垫片:
if (typeof document.getElementsByClassName !== 'function') {
HTMLElement.prototype.getElementsByClassName = function (classname) {
return this.querySelectorAll('.' + classname);
};
}
(经过测试,在Chrome 21和Opera 12.50的工作[如果是需要它],但不能在Firefox 14,我不能告诉如果它在IE,因为我没有IE)
1 - 'document.querySelectorAll(“类名‘)'在比'document.getElementsByClassName(’类名”)' – 2012-07-15 23:57:44
IE 8不支持在QSA怪异模式更浏览器所支持,所以它可能是确定您知道该页面处于标准模式,但不以其他方式。无论如何,它应该被功能测试。 – RobG 2012-07-16 00:01:21
为什么downvote? – jfriend00 2013-10-04 23:58:36
为什么还有一个downvote?这里发生了什么?这个答案是在16个月前写的。 – jfriend00 2013-10-05 02:23:32