详解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实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
jQuery中$.each使用详解
Jan 29 Javascript
javascript中this关键字详解
Dec 12 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
Vue实现点击后文字变色切换方法
Feb 11 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 Javascript
个人小程序接入支付解决方案
May 23 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
jQuery弹框插件使用方法详解
May 26 jQuery
HTML+VUE分页实现炫酷物联网大屏功能
May 27 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
通过html表格发电子邮件
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
web.py获取上传文件名的正确方法
2014/08/26 Python
python类继承用法实例分析
2015/05/27 Python
Python获取邮件地址的方法
2015/07/10 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python实现xlsx文件分析详解
2018/01/02 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
品质管理部岗位职责范文
2014/03/01 职场文书
个人自我鉴定总结
2014/03/25 职场文书
校长创先争优承诺书
2014/08/30 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
文明上网主题班会
2015/08/14 职场文书