详解原生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 相关文章推荐
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
Jquery Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
广泛收集的jQuery拖放插件集合
Apr 09 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
详解JavaScript函数
Dec 01 Javascript
浅谈js基本数据类型和typeof
Aug 09 Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
javascript实现京东快递单号的查询效果
Nov 30 Javascript
jQuery实现简单弹幕制作
Dec 10 jQuery
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+DBM的同学录程序(1)
2006/10/09 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
总经理岗位职责描述
2014/02/08 职场文书
大学应届生的自我评价
2014/03/06 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
功夫熊猫观后感
2015/06/10 职场文书
国庆阅兵观后感
2015/06/15 职场文书
暑假打工感想
2015/08/07 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
python多次执行绘制条形图
2022/04/20 Python