類名操作是前端工程師編碼過程中最頻繁的操作之一宁赤,關(guān)于類名的操作基本可以總結(jié)為以下四種:
- addClass: 為指定的dom元素添加樣式
- removeClass: 刪除指定dom元素的樣式
- toggleClass: 如果存在(不存在)撵幽,就刪除(添加)一個(gè)樣式
- hasClass: 判斷樣式是否存在
jQuery
最簡(jiǎn)單的方式當(dāng)然是直接引入萬能的jQuery。
jQuery中有addClass()
,removeClass()
,toggleClass()
,hasClass()
四種方法礁击,而且兼容性非常好。
原生JS
當(dāng)然并不是所有人都喜歡使用jQuery的逗载,并且在一些場(chǎng)景下引入jQuery并不是很合適哆窿。所以下面這種方法就使用原生JS來實(shí)現(xiàn)。
//hasClass()
function hasClass(obj, cls) {
return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
//addClass()
function addClass(obj, cls) {
if (!this.hasClass(obj, cls)) obj.className += " " + cls;
}
//removeClass()
function removeClass(obj, cls) {
if (hasClass(obj, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
obj.className = obj.className.replace(reg, ' ');
}
}
//toggleClass()
function toggleClass(obj,cls){
if(hasClass(obj,cls)){
removeClass(obj, cls);
}else{
addClass(obj, cls);
}
}
輕量級(jí)腳本
如果你比較懶厉斟,不想手寫的話挚躯,可以引入一個(gè)輕量級(jí)腳本——classie.js。
classie.js是一個(gè)非常強(qiáng)大的超級(jí)輕量級(jí)腳本擦秽,它允許您很容易添加码荔、刪除、切換,和檢查DOM中的類感挥。 classie.js 帶給你簡(jiǎn)單的實(shí)用性, 不會(huì)讓我們的腳本變得臃腫缩搅。畢竟它僅僅只有82行代碼, 1.872 kb大小。
使用方法
classie.has( element, 'my-class' ) // returns true/false
classie.add( element, 'my-new-class' ) // add new class
classie.remove( element, 'my-unwanted-class' ) // remove class
classie.toggle( element, 'my-class' ) // toggle class
附上Github主頁地址触幼。
HTML5 classList
如果你點(diǎn)開classie.js的Github主頁會(huì)發(fā)現(xiàn)該項(xiàng)目已經(jīng)停止更新了硼瓣,項(xiàng)目作者推薦大家使用全新的HTML5 API——classList。
FireFox瀏覽器和Chrome瀏覽器對(duì)classList
的支持性都很好置谦,至于IE瀏覽器堂鲤,從IE10才開始支持。在手機(jī)端媒峡,需要Android 3+或 iOS Safari 5.1+瘟栖。
以上四種方法在classList
中對(duì)應(yīng)的分別是:add()
,remove()
,toggle()
,contains()
。
除了這四個(gè)谅阿,還有:
- length 屬性半哟,表示元素類名的個(gè)數(shù),只讀奔穿;
- item() 支持一個(gè)參數(shù)镜沽,為類名的索引,返回對(duì)應(yīng)的類名贱田。
最佳方案
如果項(xiàng)目依賴jQuery的話缅茉,那就直接使用jQuery的相關(guān)方法。在其他情況下呢男摧,推薦大家使用classie.js
蔬墩。
首先译打,非常輕量,僅僅只有82行代碼, 1.872 kb大小拇颅。
其次奏司,兼容性好,能做到classList
做不到的樟插。
最后韵洋,性能很好,如果看classie.js
的源碼會(huì)發(fā)現(xiàn)它是優(yōu)先使用classList
的黄锤。