详解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 相关文章推荐
jquery text,radio,checkbox,select操作实现代码
Jul 09 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
Sep 29 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
详解node中创建服务进程
May 09 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
JavaScript的词法结构精华篇
Oct 17 Javascript
javascript实现支付宝滑块验证码效果
Jul 24 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
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
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
微信小程序实现页面左右滑动
2020/11/16 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
奥巴马的演讲稿
2014/05/15 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年环卫工作总结
2014/11/22 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python