详解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 相关文章推荐
jQuery 判断元素上是否绑定了事件
Oct 28 Javascript
为原生js Array增加each方法
Apr 07 Javascript
多个js与css文件的合并方法详细说明
Dec 26 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 Javascript
node.js中的http.response.setHeader方法使用说明
Dec 14 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
第一次动手实现bootstrap table分页效果
Sep 22 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
JS实现遍历不规则多维数组的方法
Mar 21 Javascript
通过JS运行机制的角度说说作用域
Mar 12 Javascript
浅谈vue 组件中的setInterval方法和window的不同
Jul 30 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
Zerg基本策略
2020/03/14 星际争霸
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
javascript document.referrer 用法
2009/04/30 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
Python读取图片属性信息的实现方法
2016/09/11 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python http接口自动化脚本详解
2018/01/02 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
使用Python实现批量ping操作方法
2020/05/06 Python
python 利用toapi库自动生成api
2020/10/19 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
自我鉴定注意事项
2014/01/19 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
教师对学生的寄语
2014/04/03 职场文书
56句经典英文座右铭
2019/08/09 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
Go gorilla/sessions库安装使用
2022/08/14 Golang