之前在网上查过一些添加删除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);
}
};