详解原生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+dom树型菜单类,希望朋友们一起进步
May 03 Javascript
JavaScript表单常用验证集合
Jan 16 Javascript
js 三级关联菜单效果实例
Aug 13 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
Jan 26 Javascript
JavaScript实现异步图像上传功能
Jul 12 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
layui 监听表格复选框选中值的方法
Aug 15 Javascript
JavaScript内置对象之Array的使用小结
May 12 Javascript
JavaScript实现烟花绽放动画效果
Aug 04 Javascript
Echarts.js无法引入问题解决方案
Oct 30 Javascript
如何利用React实现图片识别App
Feb 18 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
鼠标图片振动代码
2006/07/06 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
python中sets模块的用法实例
2014/09/30 Python
python获取本机外网ip的方法
2015/04/15 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
股东大会通知
2015/04/24 职场文书
奔腾年代观后感
2015/06/09 职场文书
签字仪式主持词
2015/07/03 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers