详解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 相关文章推荐
在textarea中显示html页面的javascript代码
Apr 20 Javascript
js 代码优化点滴记录
Feb 19 Javascript
ejs v9 javascript模板系统
Mar 21 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
js控制网页背景音乐播放与停止的方法
Feb 06 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
javascript中的this作用域详解
Jul 15 Javascript
详细教你微信公众号正文页SVG交互开发技巧
Jul 25 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
PHP关联链接常用代码
2012/11/05 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
js对象基础实例分析
2015/01/13 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
元旦晚会主持词
2014/03/24 职场文书
新教师教学工作总结
2015/08/14 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python