详解原生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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
js跟随滚动条滚动浮动代码
Dec 31 Javascript
js 第二代身份证号码的验证机制代码
May 12 Javascript
jQuery拖动元素并对元素进行重新排序
Dec 30 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 Javascript
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
JavaScript实现商品评价五星好评
Nov 30 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
PHP实现验证码校验功能
2017/11/16 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
JS hashMap实例详解
2016/05/26 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python常用的爬虫技巧总结
2016/03/28 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
python协程之动态添加任务的方法
2019/02/19 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python实现粒子群算法
2020/10/15 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
结婚喜宴家长答谢词
2014/01/15 职场文书
教育技术职业规划范文
2014/03/04 职场文书
小学一年级评语大全
2014/04/22 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
导游词开场白
2015/01/31 职场文书