classList總結

楔子

最近在看JavaScript高程設計果善,越看越覺得JS真的博大精深郁季,每讀一次都會有新的收獲戴质。今天我們就來說一說classList這個API。

前言

JS操作元素類名的API最熟悉的莫過于className式撼,常規(guī)用法如下

<div id=“box1”></div>
<script>
       var box1 = document.getElementById("box1");
       box1.onclick = function(){
             this.className = "warn";     
       }
<script>

相信類似這樣的寫法大家肯定很常見童社,但是className的弊端很明顯,假如元素有多個類名著隆,我想要移除其中一個怎么辦扰楼?

<div class="box warn noBorder" id="box1"></div>

如果我想移除.box類呀癣,如何寫?簡單

<script>
       box1.className = "warn noBorder"; 
</script>

事實上弦赖,復雜的地方在于很多時候你并不知道元素真正類名有多少项栏,而且也不可能每次都手寫這么多類名組成的字符串。
當然你也可以通過以下代碼部署:

var className = box1.className.split(/\s+/);//將className字符串分割成數(shù)組
var  pos = -1,
       len = className.length;
for(var i = 0;i < len;i++){
      if(className[i]  === "warn"){
              pos = i;
      }
}
className.splice(i,1);//從數(shù)組中移除該項
box1.className = className.join(" ");//將數(shù)組轉換成字符串             

很麻煩是不是腾节?還好JQ封裝了2個方法忘嫉,addClass()和removeClass()。利用這2個方法案腺,你可以直接給元素添加/移除類名庆冕,這也可以看出JQ流行的原因。
但是為了這么個簡單的問題你要我引入JQ庫劈榨?ok访递,豬腳登場。

classList

classList,簡單來說同辣,就是為了增加/切換/移除 class類新增的API拷姿。返回的是元素的類名。本質上是DOMTokenList.

關于DOMTokenList

這里引用 mozilla MDN上的一段話:

The DOMTokenList interface represents a set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList or HTMLAreaElement.relList. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.

翻譯過來就是:

DOMTokenList這種類型表示一組空間分隔的標記旱函。通常由HTMLElement.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList或HTMLAreaElement.relList返回响巢。從0開始的類JavaScript數(shù)組索引。DOMTokenList始終是區(qū)分大小寫的棒妨。

也就是說 classList relList都屬于DOMTokenList.

兼容性

來看下classList的兼容性踪古。

classList兼容性.png

這里需要說明下,IE10也是兼容classList的券腔,只不過同IE11一樣伏穆,add/remove方法不支持多參數(shù)處理。默認只會處理第一個參數(shù)

屬性

  • length屬性
    返回的是元素類名的長度纷纫,只讀
  • value屬性
    返回元素類名的字符串形式

方法

  • add()
    添加類名枕扫,支持多個類名添加。IE10/IE11不支持多參數(shù)
box1.classList.add("warn","error","tips");
  • remove()
    移除類名辱魁,支持多個類名移除烟瞧。IE10/IE11不支持多參數(shù)
box1.classList.remove("box","warn","noBorder");
  • contains()
    參數(shù)為字符串,如果元素有該類名返回true,沒有則返回false

  • toggle()
    類名切換染簇,如果原來有該類名則移除参滴;如果沒有則添加。

簡單應用

一個div元素剖笙,點擊添加某樣式卵洗,再點擊移除該樣式。

var Odiv = document.getElementById("box1");
    Odiv.onclick = function(){
           this.classList.toggle("styleName");
    }

好了,classList介紹到這过蹂,滾去看紅皮書咯十绑。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酷勺,隨后出現(xiàn)的幾起案子本橙,更是在濱河造成了極大的恐慌,老刑警劉巖脆诉,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甚亭,死亡現(xiàn)場離奇詭異,居然都是意外死亡击胜,警方通過查閱死者的電腦和手機亏狰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偶摔,“玉大人暇唾,你說我怎么就攤上這事〕秸” “怎么了策州?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宫仗。 經常有香客問我够挂,道長,這世上最難降的妖魔是什么藕夫? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任孽糖,我火速辦了婚禮,結果婚禮上汁胆,老公的妹妹穿的比我還像新娘梭姓。我一直安慰自己霜幼,他們只是感情好嫩码,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罪既,像睡著了一般铸题。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琢感,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天丢间,我揣著相機與錄音,去河邊找鬼驹针。 笑死烘挫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播饮六,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼其垄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卤橄?” 一聲冷哼從身側響起绿满,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窟扑,沒想到半個月后喇颁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡嚎货,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年橘霎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖属。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡茎毁,死狀恐怖,靈堂內的尸體忽然破棺而出忱辅,到底是詐尸還是另有隱情七蜘,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布墙懂,位于F島的核電站橡卤,受9級特大地震影響,放射性物質發(fā)生泄漏损搬。R本人自食惡果不足惜碧库,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巧勤。 院中可真熱鬧嵌灰,春花似錦、人聲如沸颅悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩瓶。三九已至驹溃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間延曙,已是汗流浹背豌鹤。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枝缔,地道東北人布疙。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灵临。 傳聞我的和親對象是個殘疾皇子拣挪,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容

  • 原文 https://www.kancloud.cn/dennis/tgjavascript/241852 一、節(jié)...
    LuckyS007閱讀 854評論 0 0
  • 真的真的希望能站在頂峰俱诸,望盡天涯路的感覺菠劝,睥睨一切的傲眼
    傅偉達閱讀 140評論 0 0
  • 最近在使用flask_socketio,項目寫好之后, 本來準備像平常一樣使用gunicorn直接開多個w...
    賣糕的佛祖啊閱讀 7,123評論 3 3
  • 宿舍一個十八歲的姑娘 在和一個五十歲的阿姨討論服裝搭配 她們說睁搭,不明白黑白配為什么是百搭 正如她們一直在追著一部《...
    糧食和花圈閱讀 237評論 1 5
  • 看著黑暗中的一切赶诊,夏侯雨涵輕輕的眨了眨眼睛,淡然地掃了一圈四周园骆,站了起來舔痪,看著自己身上的衣著,明白自己靈魂托付在...
    遺忘星海閱讀 254評論 0 0