classList 更安全灵活,适合增删改查类名;className 直接替换字符串,易误覆盖。现代开发推荐优先使用 classlist,兼容性良好,代码更健壮清晰。

在 javaScript 中操作元素的 css 类是日常开发中的常见需求。最常用的方式是通过 className 和 classList 来实现。虽然两者都能达到修改类名的目的,但在使用方式和功能上存在明显差异。
className:直接操作类名字符串
className 是一个属性,表示元素的 class 属性值,本质是一个字符串。通过它可以直接读取或设置整个 class 值。
说明:
- 读取时返回当前所有类名组成的字符串,以空格分隔。
- 赋值时会完全替换原有类名,容易误删已有类。
- 适合一次性设置全部类名,不适合增删单个类。
示例:
假设 html 元素为:<div id="box" class="header active"></div>
使用 javascript:
const el = document.getElementById('box'); console.log(el.className); // 输出 "header active" el.className = 'highlight'; // 原有类被全部替换
classList:现代的类名操作 API
classList 是一个 DOMTokenList 对象,提供了一系列方法来更安全地操作类名,不会影响其他已存在的类。
常用方法:
- add(‘class’):添加一个或多个类名。
- remove(‘class’):移除一个或多个类名。
- toggle(‘class’):切换类名(存在则删除,不存在则添加)。
- contains(‘class’):判断是否包含某个类名。
示例:
同样元素:<div id="box" class="header active"></div>
立即学习“Java免费学习笔记(深入)”;
const el = document.getElementById('box'); el.classList.add('highlight'); // 类变为 "header active highlight" el.classList.remove('active'); // 类变为 "header highlight" el.classList.toggle('open'); // 添加 open 类 el.classList.contains('header'); // 返回 true
对比总结
- 安全性:classList 更安全,避免误覆盖;className 直接替换,风险高。
- 灵活性:classList 提供丰富方法,适合动态控制;className 需手动拆分拼接字符串,麻烦且易错。
- 兼容性:className 所有浏览器都支持;classList 在 IE10+ 支持,现代项目通常无问题。
- 性能:两者性能差异极小,实际开发中可忽略。
基本上就这些。对于现代前端开发,推荐优先使用 classList,代码更清晰、健壮。只有在需要完全重置类名时,才考虑使用 className。


