详解原生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动态加载二
Aug 22 Javascript
javascript运行机制之this详细介绍
Feb 07 Javascript
jquery取子节点及当前节点属性值的方法
Sep 09 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
javascript感应鼠标图片透明度显示的方法
Feb 24 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
vue数据双向绑定的注意点
Jun 23 Javascript
微信小程序实现发送验证码按钮效果
Dec 20 Javascript
使用 Element UI Table 的 slot-scope方法
Oct 10 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
JS中==、===你分清楚了吗
Mar 04 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
python实现人脸识别代码
2017/11/08 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
顶岗实习计划书
2014/01/10 职场文书
小学教学随笔感言
2014/02/26 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
2014年度党员自我评议
2014/09/13 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
葬礼主持词
2015/07/02 职场文书
旷工检讨书大全
2015/08/15 职场文书