原生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 window.event对象详尽解析
Feb 17 Javascript
JS 面向对象之神奇的prototype
Feb 26 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
详解Vue.directive 自定义指令
Mar 27 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中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
layui实现文件或图片上传记录
2018/08/28 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Python多进程编程常用方法解析
2020/03/26 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
extern是什么意思
2016/03/10 面试题
如何在Shell脚本中使用函数
2015/09/06 面试题
大四学年自我鉴定
2013/11/13 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
Django路由层如何获取正确的url
2021/07/15 Python