在此之前,jQuery的hasClass、addClass、removeClass我们已经再熟悉不过了,然而我们并不会在每一个项目中都会去使用 jQuery或者Zepto,譬如在移动端的网页中,考虑到传说中的性能和静态资源的请求量等因素,我们通常会选择采用原生js,而对于元素的class 操作。你首先想到的就是className,这位伙计完美地得到了包括ie6在内的所有古现代浏览器的支持,尽管它的功能简直弱爆,但是人们在相当长的一 段时间还是用得不亦乐乎,甚至一些基础库也只是通过className进行了一些扩展。但是随着浏览器的不断升级,更多丰富的JavaScript API得到了支持,本文讲述的classList就是其中一个。它可以方便地对元素的类名进行增删改查,当然,API的设计者并不会帮你做所有的事,它仍 然存在一些小小的缺陷,但相比className,这已经是一个飞跃了。

classList的兼容性如下图所示:


 

从上图可以看到,严重拖后腿的还是那个IE,直到IE10,微软才总算反映了过来。而在移动端方面,除了安卓2.3及其以下版本的webview不支持
classList,其它浏览器终端都能很好地支持。由于安卓2.3的设备和IE一样已然明日黄花,所以我们仍然可以和classList愉快的玩耍,尤
其是在基于webkit内核的终端。现在,就让我们进入正题吧(尼玛,原来前面一堆都是废话)

classList是html元素对象的成员,它的使用非常简单。我们通过以下方式:

console.dir(document.body.classList);
  1. 1
  2. 2

代码laycode - v1.1

发现它的构造器(constructor)是DOMTokenList。它提供了这些已知的API:length、item、add、remove、contains、toggle。其它灰色部分如toString可以先无视。

下面我们对classList的成员进行逐一介绍:

length

静态属性。获取元素类名的个数,使用方式:

var len = document.body.classList.length;
  1. 1
  2. 2

代码laycode - v1.1

item

方法。获取元素的类名,接受一个参数,即数字索引。使用方式:

//如果index超出范围,则返回null
var cls = document.body.classList.item(index);
  1. 1
  2. 2
  3. 3

代码laycode - v1.1

add

方法。用于增加元素的类,接受一个参数,即类名。使用方式:

document.body.classList.add('myclass');

//遗憾的是,它一次性只能增加一个类,比如以下方式将会报错
document.body.classList.add('class1 class2');
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

代码laycode - v1.1

如果需要增加多个类,你只能执行多次add。

remove

方法。用于删除元素的类,接受一个参数,即类名。和add一样,它一次性只能删除一个类。使用方式:

document.body.classList.remove('myclass');
  1. 1
  2. 2

代码laycode - v1.1

contains

方法。用于检测元素是否包含某个类,返回Boolean值。使用方式:

document.body.classList.contains('myclass'); //返回true或者false
  1. 1
  2. 2

代码laycode - v1.1

toggle

方法。这个家伙是add、remove、contains的三合一版,不仅能检测元素是否包含某个类,而且还具备增删功能,即如果存在某个类,就remove掉,如果不存在,就add一下。返回一个Boolean值。使用方式:

//如果body不存在classtest的类名,就会给body增加一个classtest的类
document.body.classList.toggle('classtest'); //true //再执行一遍,classtest已被删除了
document.body.classList.toggle('classtest'); //false
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6

代码laycode - v1.1

classList的便捷性只是原生JavaScript的冰山一角,事实上标准浏览器对dom的操作已经非常方便了,尤其是选择器的查找,如 getElementsByClassName、querySelector和无敌的querySelectorAll等等。当你使用jQuery或者 Zepto根本停不下来的时候,或许你需要抚慰下你忙碌的双手,拥抱Native,那是一片广袤无边的天地!

classList详解,让你的js方便地操作DOM类的更多相关文章

  1. 详解CorelDRAW中关于群组的操作

    CorelDRAW软件中的“群组”功能键主要用于整合多个对象.在进行比较复杂的绘图编辑时,通常会有很多的图形对象,为了方便操作,可以对一些对象设定群组.设定群组以后的多个对象,将被看作一个单独的对象. ...

  2. jQuery Validate验证框架详解(jquery.validate.min.js)

    原博客 jQuery Validate验证框架详解 jQuery校验官网地址:https://jqueryvalidation.org/ 一.导入js库 <script type="t ...

  3. 定时器详解和应用、js加载阻塞、css加载阻塞

    1.setTimeout().setInterval()详解和应用 1.1 详解: setTimeout.setInterval执行时机 1.2 存在问题: setInterval重复定时器可能存在的 ...

  4. Firebug控制台详解,让调试js代码变得更简单

    http://www.open-open.com/lib/view/open1373120100347.html Firebug是网页开发的利器,能够极大地提升工作效率. Firebug控制台详解 控 ...

  5. 线程池底层原理详解与源码分析(补充部分---ScheduledThreadPoolExecutor类分析)

    [1]前言 本篇幅是对 线程池底层原理详解与源码分析  的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解. [2]ScheduledThreadPoolExecut ...

  6. 原生JS和jQuery操作DOM的区别小结

    一.Js原生对象和jQuery实例对象的相互转化: (1).原生JS对象转JQ对象: $(DOM对象); (2). JQ对象转原生JS对象: $(DOM对象).get(index); //注意区分eq ...

  7. jquery的offset().top 和position().top 详解 和如何用js实现

    1 jquery定义: offset().top 相对于当前文档的坐标(的高度) ps:包括滚动条卷去的高度 position().top 返回的是相对于其定位的祖辈元素的坐标(的高度) ps:包括滚 ...

  8. Google V8编程详解(五)JS调用C++

    http://blog.csdn.net/feiyinzilgd/article/details/8453230 最近由于忙着解决个人单身的问题,时隔这么久才更新第五章. 上一章主要讲了Google ...

  9. node源码详解(四) —— js代码如何调用C++的函数

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource4 本博客同步在https://cnodejs.o ...

随机推荐

  1. Android开发——Android系统启动以及APK安装、启动过程

    0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...

  2. 如何搭建SBT编译Scala开发的Android工程

    作者:戚明峰 最近接触了shadowsocks的Android客户端项目源码(https://github.com/shadowsocks/shadowsocks-android),刚好这个项目是使用 ...

  3. 纯HTML+CSS实现阿童木头像

    他有十万马力,能上天能入地:他分辨善恶,是勇敢正义化身:1963年,他登上荧幕,在日本创下了未曾有过的高收视率……他叫阿童木,一个纯真.善良.勇 敢的机器娃娃.“阿童木之父”手冢治虫曾说,将阿童木生日 ...

  4. 怎样安装Python3

    在浏览器地址栏输入https://www.python.org/ 打开Python官网 好了,安装完成了! 可以把安装路径C:\Users\Administrator\AppData\Local\Pr ...

  5. Linux-Ps命令使用

    ps -ef | grep java ps aux | grep java ps aux 是用BSD的格式来显示Java进程 显示的项目有: USER        PID %CPU %MEM    ...

  6. Jmeter中传递cookie值

    场景:用户登陆后会本地会保存cookie,cookie是用来跟服务端验证此用户已经登陆过的重要信息,但是如何获取并在其他请求时将此cookie传递给服务器呢? 在线程组下面之直接添加HTTP Cook ...

  7. ThreadPool线程池的几种姿势比较

    from multiprocessing.pool import ThreadPool #from multiprocessing.dummy import Pool as ThreadPool #这 ...

  8. popen和system问题

    popen和system问题 1. 问题描述 C的代码里面去调用命令启动一个shell脚本,分别使用了下面两个途径. 其中一个是: func1(cmd) { popen(cmd,type); pclo ...

  9. LeetCode - 3. Longest Substring Without Repeating Characters(388ms)

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  10. Alpha阶段展示

    程序员杀产品经理祭天(SacrificePM)团队 1.团队成员简介和个人博客地址 故事 我们队伍的建立过程稍具戏剧性,大家看我们也颇为奇怪,这么一支8人队伍是怎么诞生的呢?其实我们原本分属三组,而第 ...