DOM元素類名操作

類名操作是前端工程師編碼過程中最頻繁的操作之一宁赤,關(guān)于類名的操作基本可以總結(jié)為以下四種:

  1. addClass: 為指定的dom元素添加樣式
  2. removeClass: 刪除指定dom元素的樣式
  3. toggleClass: 如果存在(不存在)撵幽,就刪除(添加)一個(gè)樣式
  4. 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的黄锤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搪缨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸵熟,更是在濱河造成了極大的恐慌副编,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流强,死亡現(xiàn)場(chǎng)離奇詭異痹届,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)打月,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門队腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奏篙,你說我怎么就攤上這事香到。” “怎么了报破?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵悠就,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我充易,道長(zhǎng)梗脾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任盹靴,我火速辦了婚禮炸茧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稿静。我一直安慰自己梭冠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布改备。 她就那樣靜靜地躺著控漠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盐捷,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天偶翅,我揣著相機(jī)與錄音,去河邊找鬼碉渡。 笑死聚谁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滞诺。 我是一名探鬼主播形导,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼习霹!你這毒婦竟也來了骤宣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤序愚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后等限,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爸吮,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年望门,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了形娇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筹误,死狀恐怖桐早,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厨剪,我是刑警寧澤哄酝,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站祷膳,受9級(jí)特大地震影響陶衅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜直晨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一搀军、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勇皇,春花似錦罩句、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兄淫,卻和暖如春诅福,著一層夾襖步出監(jiān)牢的瞬間匾委,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工氓润, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赂乐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓咖气,卻偏偏與公主長(zhǎng)得像挨措,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崩溪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一浅役、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,380評(píng)論 0 44
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性伶唯。 1....
    LaBaby_閱讀 1,174評(píng)論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式觉既。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,335評(píng)論 0 2
  • DOM操作可分為3個(gè)方面:DOM Core(核心)乳幸、HTML DOM和CSS DOM(1)DOM Core不屬于J...
    寒橋閱讀 495評(píng)論 0 1
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    程序員poetry閱讀 16,643評(píng)論 18 503