详解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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
Dec 16 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
js中document.write的那点事
Dec 12 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
js实现的tab标签切换效果代码分享
Aug 25 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
jQuery操作cookie
Aug 08 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
bootstrap与pagehelper实现分页效果
Dec 29 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读取IMAP邮件
2006/10/09 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
js动态创建、删除表格示例代码
2013/08/07 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
基于vue实现分页效果
2017/11/06 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
Python Celery多队列配置代码实例
2019/11/22 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
PHP经典面试题
2016/09/03 面试题
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
函授自我鉴定范文
2014/02/06 职场文书
泰山导游词
2015/02/02 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
mysql函数全面总结
2021/11/11 MySQL