跨浏览器getClassName JavaScript函数

跨浏览器getClassName JavaScript函数,javascript,Javascript,我正在做一个小项目,需要按类名获取所有元素,很明显有HTML5.GetElementsByCassName,但我试图创建一个小函数,为它提供一个小的多边形填充,它不起作用。非常感谢您的帮助。或者如果有更简单的方法 function getClassName(element) { if(!document.getElementsByClassName(element)) { var retnode = []; var myclass = new RegExp('\\b'+eleme

我正在做一个小项目,需要按类名获取所有元素,很明显有HTML5.GetElementsByCassName,但我试图创建一个小函数,为它提供一个小的多边形填充,它不起作用。非常感谢您的帮助。或者如果有更简单的方法

function getClassName(element) {
if(!document.getElementsByClassName(element)) {
    var retnode = [];
    var myclass = new RegExp('\\b'+element+'\\b');
    var elem = this.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
} else {
    document.getElementsByClassName(element);
}
} 

你的功能是错误的

  • 该名称意味着您将获得一个类名,而不是一个元素
  • 当您表示className时,使用变量
    元素
  • 检查支持是否错误
    • if(!document.getElementsByClassName){
  • 在else中缺少返回
    • 返回文档。getElementsByClassName(元素);
我建议使用来自或添加polyfill的sse

为自己准备一个addClass方法…类似于

function hasClass(elem,className) {
    return elem.className.match(new RegExp('(\\s|^)'+className+'(\\s|$)'));
}

function addClass(elem,className) {
    if (!hasClass(elem,cls)) elem.className += " "+className;
}
比你要做的还要多

var elems = document.getClassName('active');
for (var i=elems.length-1; i>=0; i--) {
    addClass(elems[i],"active");
}

第二个代码示例没有太多意义。是函数没有返回正确的元素,还是它只是没有按您希望的方式调用?您调用它的示例没有意义。我如何才能正确调用它?谢谢您的回答。Better pollyfill:您忘了“else”中的
return
(称为本地的“GetElementsByCassName”)。感谢您的回复,非常感谢。这与您的意思一致吗?
var elems = document.getClassName('active');
for (var i=elems.length-1; i>=0; i--) {
    addClass(elems[i],"active");
}