原生JS编写getByClass、addClass、removeClass、hasClass
前言:
年后换了工作,在现在的公司写交互主要使用JS原生;刚刚入门前端的时候写交互一直用的原生JS,虽然用的不怎么样。后来去之前的公司之后,leader主张把jQuery用好,JS原生自然就熟练了;一路下来,jQuery用的比较熟练了,但是原生JS反而退步了,很久没用,有的东西都有点手生了;现在的公司用原生JS也挺好的,感觉现在很多新的技术也都基于JS原生;
做了两个项目,其中对class的DOM操作挺多的,在网上看了很多资料,在别人的基础上总结封装了几个经常用到的函数:getByClass、addClass、removeClass、hasClass;
原理看看代码,如果不懂看看注释也就没什么大问题。但是,有时候原理看懂了,自己不动手去做一下,就不会发现自己的问题;容易看懂,但是自己不会写;所以还的多动手~
下面是几个函数具体的代码:
//获取class
function getByClass(oParent, sClass){
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(sClass);
}else{
var res = [];
var re = new RegExp(' ' + sClass + ' ', 'i')
var aEle = oParent.getElementsByTagName('*');
for(var i = 0; i < aEle.length; i++){
if(re.test(' ' + aEle[i].className + ' ')){
res.push(aEle[i]);
}
}
return res;
}
} //增加class
function addClass(obj,cls) {
var obj_class=obj.className,//获取class的内容;
blank = ( obj_class != '' ) ? ' ' : '';//判断获取的class是否为空,如果不为空,则添加空格;
added = obj_class + blank + cls;//组合原来的class和需要添加的class,中间加上空格;
obj.className = added;//替换原来的class;
} //移除class
function removeClass(obj,cls){
var obj_class = '' + obj.className + '';//获取class的内容,并在首尾各加一个空格;'abc bcd' -> ' abc bcd '
obj_class = obj_class.replace(/(\s+)/gi,' ');//将多余的空字符替换成一个空格;' abc bcd ' -> ' abc bcd '
removed = obj_class.replace(' '+cls+' ',' ');//在原来的class,替换掉首尾加了空格的class ' abc bcd ' -> 'bcd '
removed = removed.replace(/(^\s+)|(\s+$)/g,'');//去掉首尾空格;'bcd ' -> 'bcd'
obj.className = removed;//替换原来的class;
} //判断是否存在class
function hasClass(obj,cls){
var obj_class = obj.className,//获取class的内容;
obj_class_lst = obj_class.split(/\s+/);//通过split空字符将cls转换成数组
x = 0;
for(x in obj_class_lst){
if ( obj_class_lst[x] == cls ) {
return true;
}
}
return false;
}
注:1.还是得在工作项目、学习中不断的积累这些经验,经常用到的东西自己封装一个库比较方便;
2.这些函数最好放在页面底部,特别是getByClass;因为根据页面的加载顺序,会先加载JS,如果写在body前面,会先运行getByClass,后面的内容还没加载,就会出现找不到class的情况,出现报错;
原生JS编写getByClass、addClass、removeClass、hasClass的更多相关文章
- 原生JavaScript实现的addclass,removeclass,hasclass,toggleclass,getbyclass
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 原生js 用正则实现removeclass hasclass getsclass addclass .
function getByClass(oParent,sClass){ if(oParent.getElementsByClassName){ return oParent.getElementsB ...
- 原生js 实现jquery addClass,removeClass
代码如下: function hasClass(obj, cls) { let reg = new RegExp("(\\s|^)" + cls + "(\\s|$)&q ...
- 关于错位动画的练习,原生js编写
最近在网上看到一个关于错位动画的文章,感觉非常有趣,便自己练习了一下,文章连接:http://www.w3cplus.com/animation/staggering-animations.html ...
- 原生js编写的安全色拾色器
<html > <head> <meta http-equiv="Content-Type" content="text/html; cha ...
- 原生js实现addClass,removeClass,hasClass方法
function hasClass(elem, cls) { cls = cls || ''; if (cls.replace(/\s/g, '').length == 0) return false ...
- html5的classList属性介绍和原生js实现jQuery的addClass,removeClass,hasClass方法
其实html5已经扩展了class操作的相关API,其中classList属性就以及实现了class的增删和判断. classList属性的方法有: add(value) 添加类名,如果有则不添加 c ...
- 使用原生JS编写ajax操作XMLHttpRequst对象
ajax其本质就是XMLHttpRequest,现在jquery调用异步的方法很方便,但是也不能忘记原生的JS去编写ajax; 需要注意的是,很多人在写的时候喜欢只用XMLHttpRequest对象r ...
- 原生JS编写的照片墙效果实例演示特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- P4098 [HEOI2013]ALO 可持久化01Trie
$ \color{#0066ff}{ 题目描述 }$ Welcome to ALO ( Arithmetic and Logistic Online).这是一个 VR MMORPG, 如名字所见,到处 ...
- WINDOWS SERVER 2012标准版密钥
Windows Server 2012 R2 安装密钥(只适用安装,不支持激活) 标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB MMPXK-NBJDQ-JPM34-WX3FM ...
- Angular material mat-icon 资源参考_File
ul,li>ol { margin-bottom: 0 } dt { font-weight: 700 } dd { margin: 0 1.5em 1.5em } img { height: ...
- bzoj3280: 小R的烦恼(最小费用最大流)
Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...
- Java编码转换
于Java当中,编码格式的转换一般较为麻烦,就我目前的经验来说,需要用到转码的环境主要是IO(无论是网络IO还是文件IO).转换方式主要有以下几种 方式一:String层面 String mes ...
- ACM-素数专题(持续更新)
埃拉托斯特尼筛法,或者叫埃氏筛法(听上去似乎很高大上的样子) #include<bits/stdc++.h> using namespace std; typedef long long ...
- Jenkins添加maven插件
1.1.1 安装Maven插件 我们要使用Jenkins+Maven对Java项目进行构建,需要安装Maven Project Plugin,具体安装过程请参考插件管理部分 1.1.2 3.Linux ...
- UML-6.2-用例-用例模型/用例/场景关系
参与者:具有某些行为的人或事物.如上一章中的收银员. |_主要参与者:收银员. |_协助参与者:程序(自动付费.帮收银员验证输入要素) |_幕后参与者:政府等(电子签章取证找公证机构) 用例:一组相关 ...
- zookeeper 数据节点的增删改查
1.连接服务端 [root@localhost bin]# ./zkCli.sh -server 127.0.0.1:2181 Connecting to 127.0.0.1:2181 2018-05 ...
- redis中算法之——MurmurHash2算法
MurmurHash算法由Austin Appleby发明于2008年,是一种非加密hash算法,适用于基于hash查找的场景.murmurhash最新版本是MurMurHash3,支持32位,64位 ...