详解原生JS动态添加和删除类


Posted in Javascript onMarch 26, 2019

由于需要, 给按钮组监听点击事件(要求用事件委托),当有一个按钮被点击时,相应的给该按钮添加一个类(激活类),其他没有点击的按钮就要移出该类

添加和和删除类有三种方法

首先等到一个 dom 对象(也叫dom元素), 通过document.getElement……的几种方法得到
如`

let element = document.getElementById("box");

1.通过类名, 获取类名: el.className, 赋值: el.className = "className" 会覆盖掉原来的类

2.通过属性,获取类名: el.getAttribute("class"); 赋值: el.setAttribute("class", "className1 className2"); 会覆盖掉原来的类

3.通过属性节点 attributeNode(性能差一点,但能兼容ie,getAttribute() ie 的有些版本不支持 )setAttributeNode() 方法向元素中添加指定的属性节点。
如果这个指定的属性已存在,则此方法会替换它。,获取类名: getAttributeNode("class").value, 赋值:

let attr = document.createAttribute("class");
attr.nodeValue = "className";
el.setAttributeNode(attr)

4.通过 classList属性, 获取类名 el.classList; 追加类名: el.classList.add("className"); 删除类 : el.calssList.remove("className");

上边四种方法, classList最灵活,最好好用, 但是不支持 ie9 以下的浏览器, 兼容性要差一些

代码如下:

html

<div id="btn-group">
	<div class="btn btn-active">按钮1</div>
	<div class="btn">按钮2</div>
	<div class="btn">按钮3</div>
	<div class="btn">按钮4</div>
</div>

js代码, 其中用到了ES6语法(用ES6写简洁)

let myEventUtil = {
	// 添加监听事件
	addEvent (element, type, handler) {
		if (element.addEventListener) {
			element.addEventListener(type, handler, false);
		} else if (element.attach){ // ie
			element.attach("on"+ type, handler);
		} else {
			element['on' + type] = handler;
		}
	},
	getTarget (event) {
		let event = event || window.event;
		return event.target || event.srcElement;
	}
}
let my$ = id => document.getElementById(id);

let btnGroup = my$(“btn-group”);
myEventUtil.addEvent(btnGroup, 'on', function (ev) {
	// 给所有的 btn 都移除激活的类 btn-active
	// console.log(this) ==> 是一个dom元素 btnGroup 
	// 可以通过 el.children[i]拿到具体的子元素
	// 拿到子元素了可以通过 el.classList.remove("className") 删除类
	// el.classList.add("className") 来添加类
	
	// 删除类
	let len = this.children.length;
	for (let i = 0; i < len; i ++) {
		this.children[i].classList.remove("btn-active");
		// this.children[i].className = "btn"; // 用其中一个就行
	}
	// 添加类, 拿到具体的 btn 给它添加类
	myEventUtil.getTarget(ev).classList.add("btn-active"); 
	// myEventUtil.getTarget(ev).className = "btn"; // 用其中一个就行
});

以上所述是小编给大家介绍的原生JS动态添加和删除类详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
Feb 20 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 Javascript
JS+CSS实现炫酷光感效果
Sep 05 Javascript
vue使用vant中的checkbox实现全选功能
Nov 17 Vue.js
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
Mar 26 #Javascript
监听element-ui table滚动事件的方法
Mar 26 #Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 #Javascript
node之本地服务器图片上传的方法示例
Mar 26 #Javascript
详解vue-element Tree树形控件填坑路
Mar 26 #Javascript
vue-router 起步步骤详解
Mar 26 #Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 #Javascript
You might like
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
python遍历目录的方法小结
2016/04/28 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
如何表示python中的相对路径
2020/07/08 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
说出一些常用的类,包,接口
2014/09/22 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
借款协议书
2014/09/16 职场文书
工作试用期自我评价
2015/03/10 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
JavaScript文档对象模型DOM
2021/11/20 Javascript