原生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 相关文章推荐
类似框架的js代码
Nov 09 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
Oct 28 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
轻松实现js弹框显示选项
Sep 13 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
js中作用域的实例解析
Mar 16 Javascript
使用Angular CLI生成路由的方法
Mar 24 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 Javascript
微信小程序canvas分享海报功能
Oct 31 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 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缓存技术的多种方法小结
2012/08/14 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
laravel学习教程之存取器
2016/07/30 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
python求列表交集的方法汇总
2014/11/10 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
中国电视购物:快乐购
2017/02/04 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
企业党员个人自我评价
2014/09/20 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
小时代观后感
2015/06/10 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
《青山不老》教学反思
2016/02/22 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android