详解原生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检查日期格式的函数[比较全]
Oct 17 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
JavaScript图片轮播代码分享
Jul 31 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
关于axios如何全局注册浅析
Jan 14 Javascript
Node 搭建一个静态资源服务器的实现
May 20 Javascript
Layui Table js 模拟选中checkbox的例子
Sep 03 Javascript
jQuery 实现扁平式小清新导航
Jul 07 jQuery
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
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python解释执行原理分析
2014/08/22 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
如何在python中写hive脚本
2019/11/08 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
艺术设计专业个人求职信
2013/09/21 职场文书
音乐幼师求职信
2014/07/09 职场文书
公司合并协议书范本
2014/09/30 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
第一节英语课开场白
2015/06/01 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2019入党申请书格式
2019/06/25 职场文书
python - asyncio异步编程
2021/04/06 Python