详解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一元操作符(递增、递减)使用示例
Aug 07 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
js省市县三级联动效果实例
Apr 15 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
Jan 23 Javascript
微信小程序左右滑动切换页面详解及实例代码
Feb 28 Javascript
js实现按座位号抽奖
Apr 05 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 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代码优化及php相关问题总结
2006/10/09 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Hadoop中的Python框架的使用指南
2015/04/22 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python定义类self用法实例解析
2020/01/22 Python
Python logging模块handlers用法详解
2020/08/14 Python
通过代码实例了解Python异常本质
2020/09/16 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
幼儿教师年度个人总结
2015/02/05 职场文书
值班管理制度范本
2015/08/06 职场文书
会计做账心得体会
2016/01/22 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers