美文网首页让前端飞
DOM元素类名操作

DOM元素类名操作

作者: 杜伊特 | 来源:发表于2017-07-14 09:46 被阅读62次

    类名操作是前端工程师编码过程中最频繁的操作之一,关于类名的操作基本可以总结为以下四种:

    1. addClass: 为指定的dom元素添加样式
    2. removeClass: 删除指定dom元素的样式
    3. toggleClass: 如果存在(不存在),就删除(添加)一个样式
    4. hasClass: 判断样式是否存在

    jQuery

    最简单的方式当然是直接引入万能的jQuery。

    jQuery中有addClass(),removeClass(),toggleClass(),hasClass()四种方法,而且兼容性非常好。

    原生JS

    当然并不是所有人都喜欢使用jQuery的,并且在一些场景下引入jQuery并不是很合适。所以下面这种方法就使用原生JS来实现。

    //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);  
        }  
    }
    

    轻量级脚本

    如果你比较懒,不想手写的话,可以引入一个轻量级脚本——classie.js

    classie.js是一个非常强大的超级轻量级脚本,它允许您很容易添加、删除、切换,和检查DOM中的类。 classie.js 带给你简单的实用性, 不会让我们的脚本变得臃肿。毕竟它仅仅只有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

    如果你点开classie.js的Github主页会发现该项目已经停止更新了,项目作者推荐大家使用全新的HTML5 API——classList

    FireFox浏览器和Chrome浏览器对classList的支持性都很好,至于IE浏览器,从IE10才开始支持。在手机端,需要Android 3+或 iOS Safari 5.1+。

    以上四种方法在classList中对应的分别是:add(),remove(),toggle(),contains()

    除了这四个,还有:

    • length 属性,表示元素类名的个数,只读;
    • item() 支持一个参数,为类名的索引,返回对应的类名。

    最佳方案

    如果项目依赖jQuery的话,那就直接使用jQuery的相关方法。在其他情况下呢,推荐大家使用classie.js

    首先,非常轻量,仅仅只有82行代码, 1.872 kb大小。

    其次,兼容性好,能做到classList做不到的。

    最后,性能很好,如果看classie.js的源码会发现它是优先使用classList的。

    相关文章

      网友评论

        本文标题:DOM元素类名操作

        本文链接:https://www.haomeiwen.com/subject/tddnhxtx.html