DOM元素类名操作

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

  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的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,531评论 0 44
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,222评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,422评论 0 2
  • DOM操作可分为3个方面:DOM Core(核心)、HTML DOM和CSS DOM(1)DOM Core不属于J...
    寒桥阅读 540评论 0 1
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    前端进阶之旅阅读 16,720评论 18 503