详解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 02 Javascript
jquery下利用jsonp跨域访问实现方法
Jul 29 Javascript
js兼容的placeholder属性详解
Aug 18 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
基于Angularjs实现分页功能
May 30 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
详解关于vue2.0工程发布上线操作步骤
Sep 27 Javascript
微信小程序日历插件代码实例
Dec 04 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 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生成短网址示例
2014/05/05 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
让焦点自动跳转
2006/07/01 Javascript
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
htm调用JS代码
2007/03/15 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
js实现购物车功能
2018/06/12 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
python编写猜数字小游戏
2019/10/06 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
三八妇女节活动主持词
2014/03/17 职场文书
期末学生评语大全
2014/04/24 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android