element.classList屬性用於返回一個元素的className集合,而且該屬性擁有add,remove,toggle,contains方法,詳見:https://developer.mozilla.org/en-US/docs/DOM/element.classList。node
通常咱們再操做dom節點的className時常常會有如下4個需求:正則表達式
- 判斷該節點是否存在某個className
- 移除某個節點上的指定className
- 爲某個節點添加指定的className
- 在某個節點上進行指定的兩個或多個className的切換
對於以上4個功能需求咱們之前的作法通常是利用正則表達式進行匹配,匹配成功後進行替換,移除等操做,但目前對於firefox3.六、chrome8等高級瀏覽器已經支持element.classList屬性及相應方法,因此能夠改進以上4種需求的實現。chrome
- 對於某個節點上是否存在某個className的判斷方法hasClassName():
-
dom.hasClassName =
function(node, classname) {
-
-
if(classname && node.classList && node.classList.contains){
-
return node.classList.contains(classname);
-
-
if( (' '+cn+' ').indexOf(' '+classname+' ')===-1 ){
-
-
-
-
-
-
2. 移除某個節點上指定的className,removeClassName():瀏覽器
-
dom.removeClassName =
function (node, _className){
-
-
if(_className && obj && obj.classList && obj.classList.remove){
-
obj.classList.remove(_className);
-
-
obj.className = obj.className.replace(
new RegExp("\\b" + _className + "\\b"), "");
-
-
3.爲某個節點添加指定的classNamedom
-
dom.addClassName =
function(node, className) {
-
-
if(className && node && node.classList && node.classList.add){
-
node.classList.add(className);
-
-
if( (' '+cn+' ').indexOf(' '+className+' ')===-1 ){
-
node.className = cn+
' '+className;
-
-
-
4.在某個節點上進行指定的兩個或多個className的切換ui
-
dom.toggle =
function(node,className){
-
-
var classList = node.classList;
-
if(typeof className === "undefined" || className === ""){
-
if(node.style.display !== 'none'){
-
node.style.display =
'none';
-
-
-
-
-
-
if(classList && classList.toggle){
-
node.classList.toggle(className);
-
-
if(dom.hasClassName(node,className)){
-
dom.removeClassName(node,className);
-
-
dom.addClassName(node,className);
-
-
-
轉自https://blog.csdn.net/sky_jser/article/details/8108098