之前在網上查過一些添加刪除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);
}
};