这里是一个得到广泛支持的解决方案:
function getElementsByClassName(root, clss) {
var result = [], els, i;
if(arguments.length < 2 || !root || !clss || root.nodeType !== 1) {
return result;
}
clss = clss + '';
if(root.getElementsByClassName) {
result = root.getElementsByClassName(clss);
} else if(root.querySelectorAll) {
result = root.querySelectorAll('.' + clss);
} else {
els = root.getElementsByTagName('*');
clss = " " + clss + " ";
for(i = 0; i < els.length; ++i) {
if((" " + els[ i ].className + " ").indexOf(clss) !== -1) {
result.push(els[ i ]);
}
}
}
return result;
}
然后使用它是这样的:
var bold = getElementsByClassName(document, "boldStuff");
for(var i = 0; i < bold.length; ++i) {
bold[ i ].innerHTML = 'Fred Flinstone';
}
的好处是,它使用了本地方法尽可能。
它首先尝试getElementsByClassName
,因为它通常是最快的。
然后它尝试querySelectorAll
,这将带来支持IE8
。
最后,它会对提供的根目录下的所有元素进行手动过滤。
只是一个旁白:这是 “打火石”,而不是 “Flinstone” ... – nnnnnn