classList與className區別
HTML中絕大多數元素都具有class屬性。
程式碼片段如下:
[HTML] 純文字檢視 複製程式碼<div class="a">螞蟻部落</div>
利用此屬性可以為元素設定指定的CSS樣式。
JavaScript可以通過className屬性動態獲取或者設定元素的class屬性值。
進而達到動態設定元素外觀的功能,由於class是JavaScript中的關鍵字。
所以沒有使用class作為dom物件屬性,而是使用className替代。
HTML5新增classList屬性,同樣可以操作元素class屬性。
下面通過程式碼例項介紹一下兩者的區別,關於它們具體用法參閱如下兩篇文章:
(1).className參閱JavaScript className一章節。
(2).classList參閱JavaScript classList一章節。
一.瀏覽器相容問題:
(1).className:
這是className主要優勢,所有瀏覽器都支援className屬性。
(2).classList:
此屬性HTML5新增,對IE瀏覽器並不友好,IE10+與其他主流瀏覽器支援此屬性。
二.操作元素class屬性:
className屬性返回值是一個字串,內容就是HTML元素的class屬性內容。
classList屬性返回一個包含指定元素所有樣式類的集合物件。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; border:10px solid red; } .a{background-color:#ccc;} .b{color:green;} </style> <script> window.onload=function(){ let obt=document.getElementById("bt"); let odiv = document.getElementById("ant"); obt.onclick = function () { console.log(odiv.className); console.log(odiv.classList); } } </script> </head> <body> <div id="ant" class="a b">螞蟻部落</div> <input type="button" id="bt" value="檢視效果"/> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).className的返回值就是包含元素class屬性值的字串。
(2).classList返回值是DOMTokenList型別集合,通過此集合可以非常便利的操作元素class屬性。
上述兩個特點決定了它們操作的便利性不在一個等級。
通過className操作class屬性,本質是對字串的操作,比如判斷class是否具有樣式類"b"。
那麼需要自己寫程式碼,將返回的字串分解為各個樣式類,然後再進行判斷,相對比較麻煩。
如果利用classList屬性,那麼將是非常輕鬆愉快的事情,使用DOMTokenList集合的contains方法即可實現。
程式碼演示如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; border:10px solid red; } .a{background-color:#ccc;} .b{color:green;} </style> <script> window.onload=function(){ let obt=document.getElementById("bt"); let odiv = document.getElementById("ant"); String.prototype.trim=function(){ return this.replace(/(^\s*)|(\s*$)/g,""); } Array.prototype.removeByValue = function(val) { let arr=[]; for(let i=0; i<this.length; i++) { if(this[i] != val) { arr.push(this[i]); } } return arr; } function contains(arr,content) { let i=arr.length; while(i--) { if (arr[i]===content) { return true; } } return false; } obt.onclick = function () { let str = odiv.className.trim(); let arr=str.split(" "); let classaArr=arr.removeByValue(""); console.log(contains(classaArr,"b")); let list=odiv.classList; console.log(list.contains("b")); } } </script> </head> <body> <div id="ant" class="a b">螞蟻部落</div> <input type="button" id="bt" value="檢視效果"/> </body> </html>
利用className與classList都實現了判斷是否具有"b"的功能。
程式碼執行效果截圖如下:
但是兩者的便利性簡直天壤之別,操作字串需要自己實現大量功能。
而利用classList返回的集合物件,只需要一個contains方法即可。
集合還具有其他方法,分別如下:
(1).add():新增樣式類。
(2).item():返回指定索引的樣式類。
(3).remove():刪除指定樣式類。
(4).toggle():切換樣式類。
上述方法的具體用法可以參閱JavaScript classList一章節。
相信看了上述介紹,會對兩個屬性的區別有了比較詳盡瞭解。
classList更加方便,但是相容性問題很大,當前暫時推薦使用className。
相關文章
- JavaScript classNameJavaScript
- 類成員的指標 classname::*member, (classname::*pf)()指標
- JavaScript classList 屬性JavaScript
- &與&&, |與||區別
- JavaScript className 屬性JavaScript
- [Javascript] Manipulate the DOM with the classList APIJavaScriptAPI
- ??與?:的區別
- <section>與<article> 區別
- showModal()與show() 區別
- localStorage與sessionStorage 區別Session
- mouseenter與mouseover區別
- GET與POST區別
- put與putIfAbsent區別
- JavaScript 與TypeScript區別JavaScriptTypeScript
- animation與transition 區別
- NIO與IO區別
- match()與exec()區別
- JavaScript與ECMAScript 區別JavaScript
- currentTarget與target區別
- 區別mouseover與mouseenter?
- offset與style區別
- onmouseover與onmouseenter區別
- 運算子與= 區別
- MySQL的@與@@區別MySql
- prop()與attr()區別
- #include與#include區別
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- exp與expdp區別
- WebViewClient與WebChromeClient 區別WebViewclientChrome
- expimp與expdpimpdp區別
- in與exist , not in與not exist 的區別
- __weak與__block區別,深層理解兩者區別BloC
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別
- 耦合與聚合的區別比單體與微服務區別更重要微服務
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- PHPCookie與Session的使用與區別PHPCookieSession