检索具有特定类的元素数组的最佳方法是什么?
我会使用 document.getElementsByClassName 但 IE 不支持它。
所以我尝试了Jonathan Snook's solution :
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = document.getElementsByClassName(document.body,'tab');
...但是 IE 仍然说:
Object doesn't support this property or method
任何想法、更好的方法、错误修复?
我宁愿不使用任何涉及 jQuery 或其他“笨重的 javascript”的解决方案。
更新:
我让它工作了!
作为@joe mentioned该函数不是 document
的方法。
所以工作代码看起来像这样:
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = getElementsByClassName(document.body,'tab');
...此外,如果您只需要 IE8+ 支持,那么这将起作用:
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
return this.querySelectorAll("." + className);
};
Element.prototype.getElementsByClassName = document.getElementsByClassName;
}
像平常一样使用它:
var tabs = document.getElementsByClassName('tab');
最佳答案
这不是文档的方法:
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
tabs = getElementsByClassName(document.body,'tab'); // no document
关于javascript document.getElementsByClassName 与 IE 的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410949/