原生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 数值型和字符串型之间的转换
Jul 25 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
jquery ajax修改全局变量示例代码
Nov 08 Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
基于javascript的无缝滚动动画实现2
Aug 07 Javascript
Vue2.0搭建脚手架
Mar 13 Vue.js
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
一个简单计数器的源代码
2006/10/09 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
名片管理系统python版
2018/01/11 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python中p-value的实现方式
2019/12/16 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
电子邮箱格式怎么写
2014/01/12 职场文书
平安工地建设方案
2014/05/06 职场文书