详解原生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 相关文章推荐
js css样式操作代码(批量操作)
Oct 09 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
Jun 21 Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
js实现上传图片及时预览
May 07 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
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
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
党员大会主持词
2014/04/02 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2014年终个人工作总结
2014/11/07 职场文书
公司员工安全协议书
2014/11/21 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
旅游项目合作意向书
2015/05/08 职场文书
我爱我班主题班会
2015/08/13 职场文书
教务处干事工作总结
2015/08/14 职场文书
自荐信范文
2019/05/20 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技