2021-06-17 20:47:21
HTML5 为元素新增的 classList 属性提供了简洁高效的方法来操作元素的类名,避免了传统字符串操作的繁琐性。以下是具体方法及实务应用说明:
1. classList 属性与方法classList 是 DOMTokenList 类型,包含以下常用方法:
add(className)新增一个或多个类名(多个类名用逗号分隔)。
element.classList.add('active', 'highlight'); // 添加多个类remove(className)移除一个或多个类名。
element.classList.remove('active'); // 移除单个类contains(className)检查元素是否包含指定类名,返回布尔值。
if (element.classList.contains('active')) { console.log('元素已激活');}toggle(className[, force])切换类名:若存在则移除,不存在则添加。可选参数 force 为布尔值,强制设置类名状态(true 添加,false 移除)。
element.classList.toggle('active'); // 切换状态element.classList.toggle('active', true); // 强制添加replace(oldClass, newClass)替换类名(HTML5 新增方法)。
element.classList.replace('old-class', 'new-class');length返回类名的数量(只读属性)。
console.log(element.classList.length); // 输出类名数量item(index)通过索引获取类名(只读属性)。
console.log(element.classList.item(0)); // 输出第一个类名通过 classList 实现点击切换选项卡激活状态,无需操作整个 class 字符串。
HTML 结构<ul class="nav"> <li class="item active">栏目1</li> <li class="item">栏目2</li> <li class="item">栏目3</li></ul>JavaScript 实现// 获取所有选项卡元素const items = document.querySelectorAll('.nav .item');// 遍历绑定点击事件items.forEach(item => { item.addEventListener('click', () => { // 移除当前激活项的 active 类 document.querySelector('.active')?.classList.remove('active'); // 为当前点击项添加 active 类 item.classList.add('active'); });});优化版本(使用事件委托)若选项卡数量较多,可通过事件委托优化性能:
document.querySelector('.nav').addEventListener('click', (e) => { if (e.target.classList.contains('item')) { document.querySelector('.active')?.classList.remove('active'); e.target.classList.add('active'); }});3. 传统方法 vs classList传统方法需通过 className 属性操作字符串,易出错且代码冗长:
// 添加类(需处理原类名)element.className += ' active'; // 可能重复添加// 移除类(需正则匹配)element.className = element.className.replace(/bactiveb/, '');classList 方法直接操作类名,代码简洁且安全:
element.classList.add('active'); // 自动避免重复element.classList.remove('active'); // 精准移除classList 方法在现代浏览器中广泛支持,包括:
对于需兼容旧版 IE 的项目,可使用以下 polyfill:
<script src="HTML5 的 classList 属性通过 add、remove、toggle 等方法,显著简化了类名操作逻辑,提升了代码可读性与维护性。在实务中,可广泛应用于选项卡切换、主题切换、动态样式调整等场景。