prototype - 删除类,由ClassName选择的元素

时间:2013-01-18 23:36:54

标签: javascript prototype classname

http://jsfiddle.net/9UQwM/1/

脚本以交替模式从元素中删除类

最重要的原因是什么?

可以采取哪些措施来解决问题?

Object.prototype.removeClass = function (class_name) {
    if (this.length) {
        for (i = 0; i < this.length; i++) {
            this[i].classList.remove(class_name);
        }
    }
}
document.getElementsByClassName("test").removeClass("test");

2 个答案:

答案 0 :(得分:1)

因为删除时,下一个索引向下移动一个。循环方向相反。

for (var i = this.length - 1; i >= 0; i--) { ... }

http://jsfiddle.net/9UQwM/2/

使用while循环可能会带来更多内容

Object.prototype.removeClass = function(class_name) {
    if (this.length) {
        while(this.length>0) {
            console.log(this.length);
            this[0].classList.remove(class_name);
        }
    }
}
document.getElementsByClassName("test").removeClass("test");

输出为7,6,5,4,3,2,1

http://jsfiddle.net/9UQwM/4/

删除班级时,this会更新

答案 1 :(得分:1)

我发现了另一种解决方法,而不是@epascarello所描述的。从this中创建纯JS数组可以很好地完成工作:

var that = Array.prototype.slice.call(this);
for (var i = 0; i < that.length; i++) {
    that[i].classList.remove(class_name);
}

DEMO: http://jsfiddle.net/9UQwM/3/