原生js实现addClass,removeClass,hasClass方法


Posted in Javascript onApril 27, 2016

本文分为两部分进行讲解,具体内容如下

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

function hasClass(elem, cls) {
  cls = cls || '';
  if (cls.replace(/\s/g, '').length == 0) return false; //当cls没有参数时,返回false
  return 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) {//循环数组, 判断是否包含cls
      return true;
    }
  }
  return false;
}

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
深入认识javascript中的eval函数
Nov 02 Javascript
一个简单的动态加载js和css的jquery代码
Sep 01 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
JavaScript入门教程之引用类型
May 04 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
Aug 05 Javascript
AngularJs Understanding the Model Component
Sep 02 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
Oct 28 Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
elementUI多选框反选的实现代码
Apr 03 Javascript
ES6中字符串的使用方法扩展
Jun 04 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 #Javascript
常用原生JS兼容性写法汇总
Apr 27 #Javascript
JS组件Bootstrap实现弹出框效果代码
Apr 26 #Javascript
跨域资源共享 CORS 详解
Apr 26 #Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 #Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 #Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 #Javascript
You might like
php 使用post,get的一种简洁方式
2010/04/25 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
python2与python3爬虫中get与post对比解析
2019/09/18 Python
python读取Kafka实例
2019/12/23 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Django REST 异常处理详解
2020/07/15 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
捷克时尚网上商店:OTTO
2018/03/15 全球购物
自我鉴定范文300字
2013/10/01 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年库房工作总结
2015/04/30 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL