详解原生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几种形式的树结构菜单
May 10 Javascript
location对象的属性和方法应用(解析URL)
Apr 12 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
Vue2.0实现购物车功能
Jun 05 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 Javascript
js函数和this用法实例分析
Mar 13 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
php的正则处理函数总结分析
2008/06/20 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php简单防盗链实现方法
2015/07/29 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
后勤部长岗位职责
2013/12/14 职场文书
大学生先进事迹材料
2014/02/16 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2014年图书室工作总结
2014/12/09 职场文书
老兵退伍感言
2015/08/03 职场文书