原生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 相关文章推荐
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
JavaScript入门基础
Aug 12 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
Bootstrap3 图片(响应式图片&图片形状)
Jan 04 Javascript
jquery实现多次上传同一张图片
Jan 09 Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
13 个npm 快速开发技巧(推荐)
Jul 04 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
手写一个python迭代器过程详解
2019/08/27 Python
python列表推导式操作解析
2019/11/26 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
留学生如何写好自荐信
2013/12/27 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL