跨浏览器的getClassName JavaScript函数

时间:2013-01-31 15:48:52

标签: javascript

我正在开发一个需要通过className获取所有元素的小项目,显然有HTML5 .getElementsByClassName,但我正在尝试创建一个小函数,为它提供一个小的polyfill,它只是不工作。任何帮助非常感谢。或者,如果有更简单的方法可以做到这一点。

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);
}
} 

然后这样称呼它:

document.getClassName('active'){
active.className += 'new';
}

1 个答案:

答案 0 :(得分:0)

你的功能错了。

  • 这个名字暗示你得到的是一个类名,而不是一个元素。
  • 如果您指的是className
  • ,则使用变量element
  • 检查支持是否错误
    • if(!document.getElementsByClassName) {
  • 缺少其他的回报
    • return document.getElementsByClassName(element);

我建议使用herehere来添加polyfill

抓住自己的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");
}