原生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 18 Javascript
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
Javascript 网页水印(非图片水印)实现代码
Mar 01 Javascript
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
Jul 31 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
win7下安装配置node.js+express开发环境
Dec 06 Javascript
JS查找字符串中出现次数最多的字符
Sep 05 Javascript
深入理解Angular.JS中的Scope继承
Jun 04 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
vue 动态组件用法示例小结
Mar 06 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 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
神族 Protoss 历史背景
2020/03/14 星际争霸
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php命名空间学习详解
2014/02/27 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
Vue前端项目部署IIS的实现
2020/01/06 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
深入浅析Python代码规范性检测
2020/07/31 Python
python palywright库基本使用
2021/01/21 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
合作意向书格式及范文
2014/03/31 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python