给DOM元素设置class是我们在项目中非常容易遇到的,网上的资料和总结也比较多,下面比较全面的整理一下,希望给到大家一些帮助!并引用两种成熟的classList的兼容方法

一、el.setAttribute('class','abc'); 

var div = document.getElementById('d1');
div.setAttribute("class", "abc");

兼容:IE8/9/10/Firefox/Safari/Chrome/Opera支持  IE6/7不支持setAttribute('class',xxx)方式设置元素的class。

二、el.setAttribute('className', 'abc') 

var div = document.getElementById('d1');
div.setAttribute("className", "abc");

兼容:IE6/7支持  IE8/9/10/Firefox/Safari/Chrome/Opera不支持setAttribute('className',xxx)方式设置元素的class。

三、el.className = 'abc'; 

var div = document.getElementById('d1');
div.className = 'abc';

兼容:所有浏览器都支持。

四、classList属性

HTML5新增的JavaScript API,HTML5为每个元素定义了classLlist属性,用于在元素中添加,移除及切换 CSS 类。该属性是 DOMTokenList 对象(一个只读的类数组对象),你可以通过DOMTokenList定义的方法对其进行修改。

  1. add( class1, class2, ...)    在元素中添加一个或多个类名(如果指定的类名已存在,则不会添加)用法:`el.classList.add("a", "b", "c");`

  2. remove( class1, class2, ...)    删除元素中一个或多个类名用法:el.classList.remove('a','b');          

  3. toggle(class, true|false)    在元素中切换类名;参数1:要移出或者添加的类名;参数2:可选参数,不论类名是否存在,为true时强制添加类名,false时强制删除类名;用法: 添加:el.classList.toggle("d", true);删除:el.classList.toggle("d", false);           

  4. contains( class )    判断指定的类名是否存在;用法:el.classList.contains("e") ,//如果e存在返回true 

  5. item(index)    根据索引返回类名,索引从 0 开始,如果没有则返回null;用法:el.classList.item(0) //返回e

  6. length属性 var len = document.body.classList.length;

兼容:支持classList属性的浏览器有Firefox 3.6+,ie10+和Chrome。IE9和IE9以前的版本不支持该属性,移动端方面,除了安卓2.3及以下版本的webview不支持,其它浏览器终端都能很好地支持。

最后,给不支持classList的浏览器(ie9及以下等)总结两种兼容解决方案:

第一种:

  1. if (!("classList" in document.documentElement)) {
  2. Object.defineProperty(HTMLElement.prototype, 'classList', {
  3. get: function() {
  4. var self = this;
  5. function update(fn) {
  6. return function(value) {
  7. var classes = self.className.split(/\s+/g),
  8. index = classes.indexOf(value);
  9. fn(classes, index, value);
  10. self.className = classes.join(" ");
  11. }
  12. }
  13. return {
  14. add: update(function(classes, index, value) {
  15. if (!~index) classes.push(value);
  16. }),
  17. remove: update(function(classes, index) {
  18. if (~index) classes.splice(index, 1);
  19. }),
  20. toggle: update(function(classes, index, value) {
  21. if (~index)
  22. classes.splice(index, 1);
  23. else
  24. classes.push(value);
  25. }),
  26. contains: function(value) {
  27. return !!~self.className.split(/\s+/g).indexOf(value);
  28. },
  29. item: function(i) {
  30. return self.className.split(/\s+/g)[i] || null;
  31. }
  32. };
  33. }
  34. });
  35. }

第二种:从新写了方法,比前一种代码多点,原文出处

    var classList = null;(function(){ classList = function (obj){ this.obj = obj; }; classList.prototype.add = function(value){ if(typeof value !== "string") throw TypeError("the type of value is error"); if(this.obj.classList){ this.obj.classList.add(value); }else{ var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/); this.obj.classList +=" "+arr.join(" "); } }; classList.prototype.contains = function(value){ if(typeof value !== "string") throw TypeError("the type of value is error"); if(this.obj.classList){ return this.obj.classList.contains(value); }else{ var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/); var _className = this.obj.className; for(var i = 0,len= arr.length; i<len; i++){ if(_className.search(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"))===-1){ return false; } } return true; } }; classList.prototype.remove = function(value){ if(typeof value !== "string") throw TypeError("the type of value is error"); if(this.obj.classList){ return this.obj.classList.remove(value); }else{ var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/); var _className = this.obj.className; for(var i = 0, len = arr.length;i<len; i++){ if(_className.search(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"))!==-1){ _className = _className.replace(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"),""); } } this.obj.className = _className; } }; classList.prototype.toggle = function(value){ if(typeof value !== "string") throw TypeError("the type of value is error"); if(this.contains(value)){ this.remove(value); }else{ this.add(value); } }; })();

ps:附上张鑫旭博客中关于classList的文章,让你理解的更透彻!HTML5 DOM元素类名相关操作API classList简介

转载于:https://www.cnblogs.com/toggle/p/7625963.html

js设置元素class方法小结及classList相关相关推荐

  1. js获取元素的方法与属性

    js获取元素的方法 可以使用内置对象document上的getElementById方法来获取页面上设置了id属性的元素,获取到的是一个html对象,然后将它赋值给一个变量 <scripttyp ...

  2. [Web前端基础] CSS优先级、JS运算优先级、CSS设置在第几行进行超出部分省略号、JS设置元素样式的六种方式

    CSS优先级 !important> 行内样式 > id选择器 > 类选择器 > 标签选择器 > 通配符选择器 > 继承 如果有多个复合选择器选中同一个元素,则需要 ...

  3. js获取元素的方法及具体案例

    目录 1. 获取元素的方法 2.补充知识 3.具体案例:变色模块 1. 获取元素的方法 (1)通过id获取:document.getElementByid('id名') 例: <button i ...

  4. JS 获取元素内容方法

    获取DOM元素的方法有8种 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名(ge ...

  5. js隐藏元素的方法及其区别

    方法一: 元素.style.display = "none",设置后元素不占位置 方法二: 元素.style.visibility = "hidden",设置后 ...

  6. hashmap移除元素_Java HashMap 如何正确遍历并删除元素的方法小结

    (一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap myHa ...

  7. JavaScript 技术篇 - js 查看哪个元素获取了焦点,js 指定元素获取焦点方法

    查看焦点元素 通过 document.activeElement 可以获取哪个元素获取到了焦点. 如图所示,我的光标在这个查询框里. 可以获取到该元素. 使指定元素获取焦点 focus() 方法可以使 ...

  8. js设置元素垂直居中

    /*** 设置垂直居中*/function fVericalAlignBody(){var nBodyHeight = 730;var nClientHeight = document.documen ...

  9. js进阶 11-6 jquery如何获取和设置元素的宽高(jquery多方法)

    js进阶 11-6  jquery如何获取和设置元素的宽高(jquery多方法) 一.总结 一句话总结:jquery里面多是方法啊,比如jquery对象的宽高.所以取值是方法,赋值就是方法里面带参数. ...

最新文章

  1. java swing setborder_Swing编程边框(Border)的用法总结
  2. Opencv-Python部署SIFT函数问题的处理
  3. 用python实现矩阵乘法
  4. 手把手教你Tomcat配置环境变量以及验证方法
  5. 中国海洋大学计算机考研指导
  6. Linux 进入 5.0 时代!
  7. Linux内核源码阅读之系统调用mmap()
  8. 六个步骤 教你搭建Ubuntu nfs服务器
  9. python实现规则引擎_规则引擎python
  10. http 各版本问题和优化
  11. linux登录pg数据库命令,PostgreSQL数据库pg_dump命令行不输入密码的方法
  12. HTML5初学——列表标签(09-12课)和表单标签(13-30课)、查阅文档
  13. MySQL认证介绍 (转帖)
  14. vue3开发实践总结
  15. 计算机专业英语电池,“七号电池”英语不是 No.7 battery,而是这个!超有趣!...
  16. IDEA关闭当前文件改为ctrl + w
  17. Linux/centOS安装lftp
  18. mybatis plus 事务管理器_最全MyBatis核心配置文件总结,可以作为工具先收藏了
  19. linux 修改sh文件生效,Linux-shell脚本基础
  20. 微软修复Win7 SP1安装时出现的黑屏错误“0xC0000009A”

热门文章

  1. android 上拉隐藏布局,Recycleview上拉隐藏与下拉显示
  2. python中使用函数编程的意义_总结Python编程中函数的使用要点
  3. EOSIO.DCT 1.3以上版本工具编写EOS智能合约重大更新
  4. 网络推广公司网站该如何针对主页的优化工作?
  5. 网络营销外包专员浅析网络营销外包站内关键词优化技巧(不外传)
  6. 什么样的域名利于网站SEO优化?
  7. 用计算机做科学实验评课,科学小实验课程听课心得
  8. Linux内核链表交换节点,[笔记]Linux内核链表:结点的插入、删除以及链表的遍历...
  9. linux上热编译react,如何使用react进行热加载
  10. dao层和service层和control_maven分模块构建SSM普通web项目:service层代码编写