当前位置:网站首页>原生JS动态添加和删除类
原生JS动态添加和删除类
2022-06-22 10:14:00 【zh阿飞】
原生JS动态添加和删除类
由于需要, 给按钮组监听点击事件(要求用事件委托),当有一个按钮被点击时,相应的给该按钮添加一个类(激活类),其他没有点击的按钮就要移出该类
添加和删除类有三种方法
首先得到一个 dom 对象(也叫dom元素), 通过document.getElement……的几种方法得到
如
<div id="box" class="foo"></div>
==>
<div id="box" class="foo bar"></div>
let el = document.getElementById("box");
通过类名, 获取类名:
el.className, 赋值:el.className = "foo bars"会覆盖掉原来的类通过属性,获取类名:
el.getAttribute("class");赋值:el.setAttribute("class", "foo bar");会覆盖掉原来的类通过属性节点
attributeNode(性能差一点,但能兼容ie,getAttribute()ie 的有些版本不支持 )setAttributeNode()方法向元素中添加指定的属性节点。
如果这个指定的属性已存在,则此方法会替换它。,获取类名:getAttributeNode("class").value, 赋值:let attr = document.createAttribute("class"); attr.nodeValue = "foo bar"; el.setAttributeNode(attr)通过 classList属性, 获取类名
el.classList;追加类名:el.classList.add("foo");删除类 :el.calssList.remove("foo");
上边四种方法, 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"; // 用其中一个就行
});
边栏推荐
- Discussion on the open source GIS solution of our company
- thinkphp5.0.24反序列化漏洞分析
- Cobalt Strike 从入门到入狱(三)
- Software project management 8.3 Agile project quality activities
- From in MySQL_ Unixtime and UNIX_ Timestamp processing database timestamp conversion - Case
- TikTok 宣布将数据存储于 Oracle 服务器!
- jg_使用easyexcel读取excel_20220619
- 从MVC原理开始手敲一个MVC框架,带你体会当大神的乐趣
- HMS Core新闻行业解决方案:让技术加上人文的温度
- 数据智能基础设施升级窗口将至?看九章云极 DingoDB 如何击破数据痛点
猜你喜欢

Discussion on the open source GIS solution of our company

SQL statement of final examination for College Students

Cobalt strike from entry to imprisonment (III)

Introduction to right raising method and principle (interview)

Software project management 8.3 Agile project quality activities

力扣 1108. IP 地址无效化

2022各大厂最新总结的软件测试宝典,看完不怕拿不到offer

Zuckerberg's latest VR prototype is coming. It is necessary to confuse virtual reality with reality

快速掌握 ASP.NET 身份认证框架 Identity - 登录与登出

YOLOv3目标检测
随机推荐
Xidian AI ranked higher than Qingbei in terms of AI major, and Nantah ranked first in China in terms of Software Science in 2022
呼叫中心CTI系统
Zuckerberg's latest VR prototype is coming. It is necessary to confuse virtual reality with reality
DAO 的未来:构建 web3 的组织原语
【这款工具配合jmeter,会让你的工作效率至少提升80%,强烈推荐给大家】
Should the theme of the IDE be bright or dark? Here comes the ultimate answer!
The future of Dao: an organization primitive for building Web3
The ruby code in logstash converts the @timestamp timestamp format
信号完整性(SI)电源完整性(PI)学习笔记(二十四)差分对与差分阻抗(四)
LeetCode Algorithm 剑指 Offer 22. 链表中倒数第k个节点
TikTok 宣布将数据存储于 Oracle 服务器!
Encryption market plummeted, Seth triggered a new round of concern
扎克伯格最新VR原型机来了,要让人混淆虚拟与现实的那种
被曝泄露超 1.7 亿条隐私数据,学习通回应:尚未发现明确证据
Pycharm调试卡住,出现connected
php 数据库 mysql提问
快速掌握 ASP.NET 身份认证框架 Identity - 登录与登出
PowerDesigner tip 2 trigger template
传iPhone 14将全系涨价;TikTok美国用户数据转移到甲骨文,字节无法访问;SeaTunnel 2.1.2发布|极客头条...
追更这个做嵌入式的大佬