原生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实现缓冲运动效果的方法
Apr 10 Javascript
基于ajax实现文件上传并显示进度条
Aug 03 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
AngularJS基础 ng-focus 指令简单示例
Aug 01 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
JS实现电话号码的字母组合算法示例
Feb 26 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
浅析JavaScript中的变量提升
Jun 01 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代码
2010/08/08 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
PHP输入流php://input介绍
2012/09/18 PHP
php设置编码格式的方法
2013/03/05 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Python中url标签使用知识点总结
2020/01/16 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
英国手机零售商:Metrofone
2019/03/18 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
医护人员英文求职信范文
2013/11/26 职场文书
成品仓管员工作职责
2013/12/29 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
卫生系统先进事迹
2014/05/13 职场文书
搬迁通知
2015/04/20 职场文书
讲文明倡议书
2015/04/29 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技