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

削除すると、次のインデックスが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 に答える