详解原生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 相关文章推荐
JavaScript 动态改变图片大小
Jun 11 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
使用javascript实现json数据以csv格式下载
Jan 09 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
Mar 02 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
Jun 17 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
详解vue-cli脚手架中webpack配置方法
Aug 22 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 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
CI框架给视图添加动态数据
2014/12/01 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
javascript中对对层的控制
2006/12/29 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python利用微信公众号实现报警功能
2018/06/10 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
学生档案自我鉴定
2013/10/07 职场文书
自荐信的禁忌和要点
2013/10/15 职场文书
投标单位介绍信
2014/01/09 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
Python数据处理的三个实用技巧分享
2022/04/01 Python