類名的新增addClass
//測試
//html文件中
<div class="box4 box1">1111</div>
<div class=" box2 box3 ">2222</div>
//script中
$("div").addClass("box1 box2 box3 box4");
複製程式碼
類名的移出removeClass
//測試
//html文件中
<div class="box1 box2 box3 box4 box5">1111</div>
<div class=" box1 box1 box2 box2 box3 ">2222</div>
//script中
$("div").addClass("box1 box2");
複製程式碼
//在原型上繼續新增
Liang.prototype = {
constructor : Liang,
init : function(){}, //(1)
html : function(){}, //(2)
on : function(){}, //(3)
off : function(){}, //(3)
text : function(){}, //(4)
val : function(){}, //(4)
eq : function(){}, //(4)
//類名新增addClass
addClass : function(cName){
if(typeof cName === "string"){
//要新增的類名的陣列
var arrCName = cName.trim().split(/\s+/);
if( arrCName.toString() === "") return this; //說明輸入的是空字串
Liang.each(this, function(v){
//得到類名集合的陣列,並與新增的類名陣列拼接
var arrEleClass = v.className.trim().split(/\s+/).concat(arrCName);
//取出
for(var i = 0; i < arrEleClass.length; i++){
for(var j = arrEleClass.length - 1; j > i; j--){
if(arrEleClass[i] === arrEleClass[j]){
arrEleClass.splice(j, 1);
}
}
}
v.className = arrEleClass.join(" ");
});
}
return this;
},
//類名移出removeClass
removeClass : function(cName){
//如果不寫,表示移出全部 $("div").removeClass()
if(typeof cName === "undefined"){
Liang.each(this, function(v){
v.className = "";
});
return this;
}else if(typeof cName === "string"){
//要移出的類名陣列
var arrCName = cName.trim().split(/\s+/);
if(arrCName.toString() === "") return;
//移出對應的類名
Liang.each(this, function(v){
//元素自身已經存在的類名
var arrEleClass = v.className.trim().split(/\s+/);
for(var i = 0, len = arrCName.length; i < len; i++){
//對元素本身已經存在的類名陣列遍歷,刪除符合條件的類名
for(var j = arrEleClass.length - 1; j >= 0; j--){
if(arrCName[i] === arrEleClass[j]){
arrEleClass.splice(j, 1);
}
}
}
v.className = arrEleClass.join(" ");
});
}
return this;
},
//判斷類名是否存在,返回布林值
hasClass : function(cName){
var isClass = false;
Liang.each(this,function(v){
cName = cName.trim();
var reg = new RegExp("\\b" + cName + "\\b");
if(reg.test(v.className)){
isClass = true; //有類名,設定為true
return false; //結束當前的遍歷
}
});
return isClass; //返回布林值確定有無類名
},
//判斷類名是否存在,存在就刪除,不存在就新增
toggleClass : function(cName){
Liang.each(this, function(v){
var that = Liang(v); //將單個節點物件包裝成jq物件
if(that.hasClass(cName)){ //有類名,刪除
that.removeClass(cName);
}else{ //無類名,新增
that.addClass(cName);
}
});
},
//利用靜態方法each實現
each :function(fn){
Liang.each(this, function(v, i, arr){
var bool = fn.call(v, v, i, arr);
if(bool !== "undefined"){
return;
}
});
}
}
複製程式碼