详解原生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 相关文章推荐
jquery 模式对话框终极版实现代码
Sep 28 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
Dec 05 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
一款由jquery实现的整屏切换特效
Sep 15 Javascript
js数组的操作指南
Dec 28 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
web打印小结
Jan 11 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 Javascript
layui导出所有数据的例子
Sep 10 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
一个php作的文本留言本的例子(一)
2006/10/09 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
浅析PHP开发规范
2018/02/05 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
纯js实现隔行变色效果
2017/11/29 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python enumerate内置函数用法总结
2020/01/07 Python
Python如何给你的程序做性能测试
2020/07/29 Python
python中pdb模块实例用法
2021/01/15 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
医科大学生的自我评价
2013/12/04 职场文书
售后主管岗位职责
2013/12/08 职场文书
中国世界遗产导游词
2015/02/13 职场文书
运动会班级前导词
2015/07/20 职场文书
音乐研修感悟
2015/11/18 职场文书