element.classList属性及方法应用

来源:互联网 发布:莆田淘宝美工培训 编辑:程序博客网 时间:2024/06/11 12:10
element.classList属性用于返回一个元素的className集合,并且该属性拥有addremovetogglecontains方法,详见:https://developer.mozilla.org/en-US/docs/DOM/element.classList。

一般我们再操作dom节点的className时经常会有以下4个需求:

  1. 判断该节点是否存在某个className
  2. 移除某个节点上的指定className
  3. 为某个节点添加指定的className
  4. 在某个节点上进行指定的两个或多个className的切换
对于以上4个功能需求我们以前的做法一般是利用正则表达式进行匹配,匹配成功后进行替换,移除等操作,但目前对于firefox3.6、chrome8等高级浏览器已经支持element.classList属性及相应方法,所以可以改进以上4种需求的实现。

  1. 对于某个节点上是否存在某个className的判断方法hasClassName():

    dom.hasClassName = function(node, classname) {        var cn = node.className;        if(classname && node.classList && node.classList.contains){    //浏览器特性判断是否支持classList及对应的contains方法            return node.classList.contains(classname);        }else{//对于不支持classList及对应的contains方法使用indexOf进行字符窜匹配            if( (' '+cn+' ').indexOf(' '+classname+' ')===-1 ){               return false;            }else{                return true;            }        }     };

2. 移除某个节点上指定的className,removeClassName():

    dom.removeClassName = function (node, _className){        var obj = node;        if(_className && obj && obj.classList && obj.classList.remove){//浏览器特性判断是否支持classList及对应的remove方法            obj.classList.remove(_className);        }else{            obj.className = obj.className.replace(new RegExp("\\b" + _className + "\\b"), "");       }     };
3.为某个节点添加指定的className


    dom.addClassName = function(node, className) {        var cn = node.className;        if(className && node && node.classList && node.classList.add){//浏览器特性判断是否支持classList及对应的add方法            node.classList.add(className);        }else{            if( (' '+cn+' ').indexOf(' '+className+' ')===-1 ){                node.className = cn+' '+className;            }        }    };
4.在某个节点上进行指定的两个或多个className的切换

    dom.toggle = function(node,className){        node = $E(node) || node;        var classList = node.classList;        if(typeof className === "undefined" || className === ""){//当没有传递className参数时,做hidden和show的切换            if(node.style.display !== 'none'){                node.style.display = 'none';            }else{                node.style.display = '';            }            return;        }        if(classList && classList.toggle){//传递了className参数时做浏览器特性判断,判断是否支持classList及对应的toggle方法            node.classList.toggle(className);        }else{            if(dom.hasClassName(node,className)){                dom.removeClassName(node,className);            }else{                dom.addClassName(node,className);            }        }    };

原创粉丝点击