详解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 相关文章推荐
Flash+XML滚动新闻代码 无图片 附源码下载
Nov 22 Javascript
JavaScript 拖拉缩放效果
Dec 10 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
D3.js实现拓扑图的示例代码
Jun 30 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
判断“命令按钮”是否被鼠标单击详解
Jul 31 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
TypeScript中条件类型精读与实践记录
Oct 05 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 选项及相关信息函数库
2006/12/04 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
浅析vue深复制
2018/01/29 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
理解Python中的类与实例
2015/04/27 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
理解python正则表达式
2016/01/15 Python
python 获取网页编码方式实现代码
2017/03/11 Python
通过cmd进入python的实例操作
2019/06/26 Python
Python内存管理实例分析
2019/07/10 Python
Python编程中类与类的关系详解
2019/08/08 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
上课迟到检讨书
2014/02/19 职场文书
研究生导师推荐信
2014/09/06 职场文书
2014年城管工作总结
2014/11/20 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android