详解原生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 相关文章推荐
js版本A*寻路算法
Dec 22 Javascript
js 自制滚动条的小例子
Mar 16 Javascript
JS完成代码前最好对其做5件事
Apr 07 Javascript
Javascript操作URL函数修改版
Nov 07 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
Nov 07 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
jQuery 重复加载错误以及修复方法
Dec 16 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
JS实现的打字机效果完整实例
Jun 20 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 Javascript
如何利用JavaScript实现二叉搜索树
Apr 02 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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python魔法方法详解
2019/02/13 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
集团薪酬管理制度
2014/01/13 职场文书
《称象》教学反思
2014/04/25 职场文书
煤矿安全承诺书
2014/05/22 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
个人违纪检讨书
2014/09/15 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书