1

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");
4

2 回答 2

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当你删除类时更新

于 2013-01-18T23:43:26.893 回答
1

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

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

演示:http: //jsfiddle.net/9UQwM/3/

于 2013-01-18T23:50:11.373 回答