JavaScript类名操作:className与classList API详解
作者:白露时间:2026-10-22 03:21:21浏览:284
本文介绍JavaScript中操作CSS类名的两种主要方式:通过className属性直接赋值,以及使用classList API进行更灵活的管理。重点解析classList的add、remove、toggle等方法,并探讨如何扩展支持多类名操作及链式调用,帮助开发者根据需求选择合适方案。
JavaScript类名操作基础
第一种实现方式是利用元素的className属性。
使用classList API
第二种方式则是调用classList API接口。
//用于匹配类名存在与否
function reg(name){
return new RegExp('(^|\\s)'+name+'(\\s+|$)');
}
//hasClass addClass removeClass toogleClass
var hasClass,addClass,removeClass;
if('classList' in document.documentElement){
hasClass=function(obj,cname){
return obj.classList.contains(cname);
};
addClass=function(obj,cname){
obj.classList.add(cname);
};
removeClass=function(obj,cname){
obj.classList.remove(cname);
};
toggleClass=function(obj,cname){
obj.classList.toggle(cname);
};
}else{
hasClass=function(obj,cname){
return reg(cname).test(obj.className);
};
addClass=function(obj,cname){
if(!hasClass(obj,cname)){
obj.className=obj.className+' '+cname;
}
};
removeClass=function(obj,cname){
obj.className=obj.className.replace(reg(cname),' ');
};
toggleClass=function(obj,cname){
var toggle=hasClass(obj,cname)?removeClass:addClass;
toggle(obj,cname);
};
}
//true
document.body.classList.toString() === document.body.className;
操作限制与扩展方案
需要注意的是,直接操作className属性时,每次通常只能指定单个类名,且无法像jQuery那样进行链式多类名操作。
因此,我们可以对现有功能进行扩展:
//addClass
DOMTokenList.prototype.addClass=function(str){
tts.split(' ').forEach(function(c){
this.add(c);
}.bind(this));
return this;
}
//removeClass
DOMTokenList.prototype.removeClass=function(str){
tts.split(' ').forEach(function(t){
this.remove(t);
}.bind(this));
return this;
}
//removeClass
DOMTokenList.prototype.toggleClass=function(str){
tts.split(' ').forEach(function(t){
this.toggle(t);
}.bind(this));
return this;
}
上述内容即为JavaScript中实现类名添加与移除的常用方法,希望能对读者有所帮助。如有任何疑问,欢迎留言交流,小编将及时回复。同时感谢大家对本网站的支持!
作者最新文章
AOS.js 动画不触发怎么办?排查 DOM 加载与移动端兼容问题
2026-11-05 17:02:26
sigma.js 怎么实现节点点击、拖拽与悬停提示交互
2026-11-05 15:03:27
Matter.js 与 PixiJS/Three.js 集成:分离物理计算与渲染
2026-11-05 13:43:48
主流JS弹幕库选型指南:Danmaku.js等库的功能与体积对比
2026-11-05 09:28:19
JavaScript点击事件监听与交互效果实例
2026-11-05 09:10:19
