原生js添加刪除class



之前在網上查過一些添加刪除class的原生js寫法,感覺用着很方便,於是我就自己按自己的需求找了一個

Object.prototype.hasClass = function(cls) {
    return this.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
};

Object.prototype.addClass = function(cls) {
    if (!this.hasClass(cls)) this.className += " " + cls;
};

Object.prototype.removeClass = function(cls) {
    if (this.hasClass(cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        this.className = this.className.replace(reg, ' ');
    }
};

Object.prototype.toggleClass = function(cls){
    if(this.hasClass(cls)){
        this.removeClass(cls);
    }else{
        this.addClass(cls);
    }
};

以上是我修改之後的版本,改動不多,只是把原本的function hasClass(obj,cls)等改爲了Object.prototype.function,同時把function內的obj全都進行了相關的修改,之前試過用reg.test在hasClass中進行判定,結果出錯,出現了在同一元素中可多次添加相同class的問題,之後改爲match後問題解決。
在使用中發現,原始版本的使用比我改的更爲自由,在此添加上之前我所找到的原始版本,應該沒有太多的改動。

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

function addClass(obj,cls) {
    if (!hasClass(obj,cls)) obj.className += " " + cls;
}

Object.prototype.removeClass = function removeClass(obj,cls) {
    if (hasClass(obj,cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        obj.className = obj.className.replace(reg, ' ');
    }
};

function toggleClass(obj,cls){
    if(this.hasClass(obj,cls)){
        this.removeClass(obj,cls);
    }else{
        this.addClass(obj,cls);
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章