详解原生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实现倒计时按钮的实现代码
Mar 23 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
Javascript 按位左移运算符使用介绍(
Feb 04 Javascript
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
AngularJS自动表单验证
Feb 01 Javascript
JQuery 设置checkbox值二次无效的解决方法
Jul 22 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 Javascript
layui输入框只允许输入中文且判断长度的例子
Sep 18 Javascript
vue setInterval 定时器失效的解决方式
Jul 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
SONY SRF-M100的电路分析
2021/03/02 无线电
php返回json数据函数实例
2014/10/09 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
Puppet的一些技巧
2018/09/17 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
小摄影师教学反思
2014/04/27 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
常住证明范本
2015/06/23 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS