详解js中class的多种函数封装方法


Posted in Javascript onJanuary 03, 2016

本文实例讲解了js中class的多种函数封装方法,分享给大家供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>关于class的多种函数封装</title>
<style>
body{
  margin: 0;
}
li{
  height: 20px;
}
</style>
</head>
<body>
<div class="box" id="box">
  <ul class="list">
    <li class="in abc ab "></li>
    <li class="in ac b "></li>
    <li class="in a "></li>
    <li class="in acb "></li>
    <li class="in ba "></li>
    <li class="abc"></li>
  </ul>
</div>
<script>
//数组的indexOf方法封装
function indexOf(arr,value,start){
  //如果不设置start,则默认start为0
  if(arguments.length == 2){
    start = 0;
  }
  //如果数组中存在indexOf方法,则用原生的indexOf方法
  if(arr.indexOf){
    return arr.indexOf(value,start);
  }
  for( var i = 0; i < arr.length; i++){
    if(arr[i] === value){
      return i;
    }
  }
  return -1;
}
//数组去重方法封装
function noRepeat(arr){
  var result = [];
  for( var i = 0; i < arr.length; i++){
    if(indexOf(result,arr[i]) == -1){
      result.push(arr[i]);
    }
  }
  return result;
}
//inArray方法封装
function inArray(arr,value){
  for(var i = 0; i < arr.length; i++){
    if(arr[i] === value){
      return true;
    }
  }
  return false;
}
//去除首尾空格函数封装
function trim(arr){
  var result = arr.replace(/^\s+|\s+$/g,'');
  return result;
}
//getElementsByClassName函数封装
function getElementsByClassName(parentObj,classStr){
  var result = [];
  var objs = parentObj.getElementsByTagName('*');
 
  //如果classStr用空格分隔,则表示class必须同时满足才有效
  var targetArr1 = noRepeat(trim(classStr).split(/\s+/));
  //如果classStr用逗号分隔,则表示class只要有一个满足就有效
  var targetArr2 = noRepeat(trim(classStr).split(/\s*,\s*/));
   
  if(classStr.indexOf(',') == -1 ){
    //用空格分隔或者只有一个class
    label: for(var i = 0; i < objs.length; i++){
      var arr = noRepeat(trim(objs[i].className).split(/\s+/));
      for( var j = 0; j < targetArr1.length; j++){
        if(!inArray(arr,targetArr1[j])){
          continue label;
        }
      }
      result.push(objs[i]);
    }
    return result;
  }else{
    //用逗号分隔
    label: for(var i = 0; i < objs.length; i++){
        var arr = noRepeat(trim(objs[i].className).split(/\s+/));
        for( var j = 0; j < targetArr2.length; j++){
          if(inArray(arr,targetArr2[j])){
            result.push(objs[i]);
            continue label;
          }
        }
         
      }
      return result;   
    }
}
 
//addclass函数封装
function addClass(obj,classStr){
  var array = noRepeat(trim(obj.className).split('\s+'));
  if(!inArray(array,classStr)){
    array.push(classStr);
  }
  obj.className = array.join(' ');
  return obj;
}
//removeclass函数封装
function removeClass(obj,classStr){
  var array = noRepeat(trim(obj.className).split('\s+'));
  var index = indexOf(array,classStr);
  if(index != -1){
    classStr.splice(index,1);
    obj.className = classStr.join(' ');
  }
  return obj;
}
//toggleClass函数封装
function toggleClass(obj,classStr){
  var array = noRepeat(trim(obj.className).split('\s+'));
  if(inArray(array,classStr)){
    removeClass(obj,classStr);
  }else{
    addClass(obj,classStr);
  }
}
</script>
</body>
</html>

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript css float属性的特殊写法
Nov 13 Javascript
理解Javascript_12_执行模型浅析
Oct 18 Javascript
JS动态获取当前时间,并写到特定的区域
May 03 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 Javascript
浅谈react前后端同构渲染
Sep 20 Javascript
微信小程序之数据缓存的实例详解
Sep 29 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
TS 类型收窄教程示例详解
Sep 23 Javascript
js中利用tagname和id获取元素的方法
Jan 03 #Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 #Javascript
基于javascript实现简单计算器功能
Jan 03 #Javascript
详解Javascript事件驱动编程
Jan 03 #Javascript
基于javascript实现仿百度输入框自动匹配功能
Jan 03 #Javascript
js实现搜索框关键字智能匹配代码
Mar 26 #Javascript
javascript合并表格单元格实例代码
Jan 03 #Javascript
You might like
php json_encode奇怪问题说明
2011/09/27 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
python模块restful使用方法实例
2013/12/10 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python @property装饰器原理解析
2020/01/22 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
优秀毕业生求职信范文
2014/01/02 职场文书
图书室管理制度
2014/01/19 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
药品开票员岗位职责
2015/04/15 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
公司规章制度范本
2015/08/03 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
关于vue-router-link选择样式设置
2022/04/30 Vue.js