原生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 相关文章推荐
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
Jan 19 Javascript
js实现点击切换TAB标签实例
Aug 21 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
vue.js+element 默认提示中英文操作
Nov 11 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 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+DBM的同学录程序(3)
2006/10/09 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
浅谈PHP的反射机制
2016/12/15 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python随机数分布random测试
2018/08/27 Python
pytorch masked_fill报错的解决
2020/02/18 Python
keras 多gpu并行运行案例
2020/06/10 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
什么是反射
2012/03/17 面试题
英文版餐饮业求职信
2013/10/18 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
公司员工活动策划方案
2014/08/20 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers