第一部分:原生js实现addClass,removeClass,hasClass方法

function hasClass(elem, cls) {cls = cls || '';if (cls.replace(/\s/g, '').length == 0) return false; //当cls没有参数时,返回falsereturn new RegExp(' ' + cls + ' ').test(' ' + elem.className + ' ');
}function addClass(ele, cls) {if (!hasClass(elem, cls)) {ele.className = ele.className == '' ? cls : ele.className + ' ' + cls;}
}function removeClass(ele, cls) {if (hasClass(elem, cls)) {var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, '') + ' ';while (newClass.indexOf(' ' + cls + ' ') >= 0) {newClass = newClass.replace(' ' + cls + ' ', ' ');}elem.className = newClass.replace(/^\s+|\s+$/g, '');}
}

第二部分:使用原生JS实现jQuery的addClass, removeClass, hasClass函数功能

function addClass(obj, cls){var obj_class = obj.className,//获取 class 内容.blank = (obj_class != '') ? ' ' : '';//判断获取到的 class 是否为空, 如果不为空在前面加个'空格'.added = obj_class + blank + cls;//组合原来的 class 和需要添加的 class.obj.className = added;//替换原来的 class.
}function removeClass(obj, cls){var obj_class = ' '+obj.className+' ';//获取 class 内容, 并在首尾各加一个空格. ex) 'abc    bcd' -> ' abc    bcd 'obj_class = obj_class.replace(/(\s+)/gi, ' '),//将多余的空字符替换成一个空格. ex) ' abc    bcd ' -> ' abc bcd 'removed = obj_class.replace(' '+cls+' ', ' ');//在原来的 class 替换掉首尾加了空格的 class. ex) ' abc bcd ' -> 'bcd 'removed = removed.replace(/(^\s+)|(\s+$)/g, '');//去掉首尾空格. ex) 'bcd ' -> 'bcd'obj.className = removed;//替换原来的 class.
}function hasClass(obj, cls){var obj_class = obj.className,//获取 class 内容.obj_class_lst = obj_class.split(/\s+/);//通过split空字符将cls转换成数组.x = 0;for(x in obj_class_lst) {if(obj_class_lst[x] == cls) {//循环数组, 判断是否包含clsreturn true;}}return false;
}

转载自:http://www.jb51.net/article/83101.htm

原生js实现addClass,removeClass,hasClass方法相关推荐

  1. [js进阶]原生js实现addClass,removeClass,hasClass方法

    addClass function addClass(obj, cls){//获取 class 内容.var obj_class = obj.className,//判断获取到的 class 是否为空 ...

  2. 原生JS实现addClass,removeClass,toggleClass

    jQuery操作class的方式非常强大,但是目前还有一些人不知道如何使用或者由于项目统一性的原因无法使用jquery. 在此写了一个利用原生js来实现对dom元素class的操作方法 1.addCl ...

  3. jQuery对类的操作.addClass()/.removeClass()/.hasClass()方法

    .addClass():给DOM元素添加类名,间接控制样式 .removeClass():移除DOM元素的样式 .hasClass():判断DOM元素是否有某类名 [例]代码功能:点击换肤.原理:设置 ...

  4. 原生js实现preAll和nextAll方法

    一直以来都在好奇,jquery的prevAll和nextAll方法都是咋实现的,那么厉害,而且还那么方便.不得不说,jquery真的帮我们省去了开发中手写大量js代码带来的开发进度问题,而且很好的解决 ...

  5. 漫谈原生JS添加元素的两种方法

    漫谈原生JS添加元素 常规方法 常规方法是首先创建一个目标元素并赋值给某个变量 ,但是元素里面内容较多,需要innerHTML赋值,将含有内容的变量赋值给目标元素的变量,最后,将这个目标元素的变量通过 ...

  6. 原生JS查找相邻元素——siblings方法

    在JQuery中可以很方便地用 elem.siblings() 方法实现查找相邻元素,但在JS中并没有这样的方法,可以用previousSibling和nextSibling结合来实现. 不过在JS中 ...

  7. 原生JS替代jQuery的各种方法汇总

    前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...

  8. 【数组方法大合集】原生js数组array常用工具方法大合集

    var array = {/* 数组求和*/sum: arr => eval(arr.join("+")),/* 判断一个数组(支持一个字符串)里面的是否有任何一个元素被包含 ...

  9. css原生样式支持,原生JS读写CSS样式的方法

    通过Element对象的getAttribute().setAttribute().removeAttribute()直接读写style属性 如:elm.setAttribute('style','c ...

最新文章

  1. 疫情影响全景图:疫情对各行业短中期影响!
  2. ckeditor4 php,CKEditor 4自定义下拉列表
  3. a high quality start up vc in uk
  4. leetcode 664. 奇怪的打印机(dp)
  5. Python 数据分析三剑客之 Matplotlib(五):散点图的绘制
  6. oracle按照指定顺序读取,oracle按照指定顺序进行排序
  7. javacc解析json报错
  8. Web后端学习笔记Flask(2)模板
  9. 小米浏览器导出html,小米浏览器离线视频如何导出 小米浏览器离线视频导出教程...
  10. 科技热点周刊|马斯克卖掉特斯拉 10% 股票;Facebook 停用面部识别系统;微软拥抱 Metaverse;雅虎退出中国
  11. Spring Data Jpa 复合主键
  12. HashMap-链表与红黑树转换触发条件
  13. CSDN:借助工具对【本博客访问来源】进行数据图表可视化(网友主要来自欧美和印度等)——记录数据来源截止日期20190811
  14. 手动安装ceph和使用
  15. 大数相乘 - 浮点数
  16. IDEA 阿里巴巴代码规范检查插件使用
  17. 是 公安大学王大伟教授写的文章~~~
  18. python使用with open() as 打开文件
  19. 蓝绿配色个人岗位竞聘PPT模板
  20. ubuntu下ufw学习

热门文章

  1. 从Linux移植到FreeBSD
  2. oracle 索引表达式,Oracle 索引index那些事
  3. 自定义View和自定义ViewGroup一步到位
  4. 选择安防监控系统镜头时需注意各种…
  5. Error: Could not open client transport with JDBC Uri 解决方案
  6. 再牛逼的伟人,也有苦逼的青春
  7. 珍惜光阴,如果浪费的话,就让它们浪费在Information Technology上吧!
  8. 请问C#中 if(fonrdlg .ShowDialog () ==DialogResult .OK )怎么理解
  9. 组装超级计算机需要什么知识,Microwulf我们平常人也能组装的超级计算机
  10. 架构实战:架构设计文档模板