0

0

如何仅对点击的 li 元素添加 active 类(而非全部)?

花韻仙語

花韻仙語

发布时间:2026-02-21 15:24:01

|

350人浏览过

|

来源于php中文网

原创

如何仅对点击的 li 元素添加 active 类(而非全部)?

本文详解如何通过事件委托与类名管理,确保点击时仅高亮当前 li 元素,同时自动移除其他 li 的 active 状态,避免多元素误激活问题。

本文详解如何通过事件委托与类名管理,确保点击时仅高亮当前 li 元素,同时自动移除其他 li 的 active 状态,避免多元素误激活问题。

在实际开发中,为列表项(

  • )添加点击高亮效果是常见需求。但若直接为每个 li 绑定独立事件监听器且未清理已有状态,极易出现「点击一个,多个变红」的问题——这正是原始代码的根本缺陷:它只做添加(.add('active')),却从未移除先前已存在的 active 类。

    ✅ 正确做法:单选模式 + 状态归一化

    核心逻辑有两点:

    • 移除旧状态:每次点击前,先查找并移除文档中已存在的 .active 元素;
    • 添加新状态:再将 active 类精准添加到当前被点击的元素上(使用 e.currentTarget 而非闭包变量,更健壮)。

    以下是优化后的完整实现:

    Dang.ai
    Dang.ai

    Dang.ai是一个AI工具目录集,已收集超过5000+ AI工具

    下载
    const lis = document.querySelectorAll('.li');
    lis.forEach(li => {
      li.addEventListener('click', (e) => {
        // 安全移除之前已激活的元素(可选链避免报错)
        document.querySelector('.active')?.classList.remove('active');
        // 为当前点击元素添加 active 类
        e.currentTarget.classList.add('active');
      });
    });

    对应的 CSS 保持简洁清晰:

    ul {
      list-style: none;
      display: flex;
      justify-content: center;
    }
    
    .li {
      margin: 0 0.5rem;
      padding: 0.5rem 0.75rem;
      border: 1px solid black;
      border-radius: 0.25rem;
      cursor: pointer;
      transition: color 0.2s; /* 推荐添加过渡效果 */
    }
    
    .li:hover {
      background-color: #ccc;
    }
    
    .li.active {
      color: red;
    }

    ? 关键说明

    • e.currentTarget 始终指向绑定事件监听器的元素(即当前 li),比闭包中的 li 变量更可靠,尤其在动态 DOM 场景下;
    • document.querySelector('.active')?.classList.remove(...) 使用可选链操作符(?.),当无匹配元素时静默跳过,不抛出错误,提升鲁棒性;
    • 若需支持「取消选中」(即再次点击已激活项则取消高亮),可扩展为切换逻辑:e.currentTarget.classList.toggle('active'),但需配合移除其他项的逻辑(当前方案已满足单选需求)。

    ? 常见误区提醒

    • ❌ 不要依赖 forEach 闭包中的 li 变量做状态判断(如 li.classList.contains('active')),因无法感知全局状态变化;
    • ❌ 避免用 getElementsByTagName('li') 或重复查询所有 li 再遍历移除——效率低且易漏;
    • ✅ 推荐统一用 document.querySelector('.active') 精准定位唯一目标,语义清晰、性能最优。

    通过以上改造,即可实现真正的「单击单高亮」行为:无论用户点击哪个

  • ,仅该元素变红,其余自动复位,体验专业、逻辑严谨、代码可维护性强。
  • 相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    php中foreach用法
    php中foreach用法

    本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

    182

    2025.12.04

    go语言闭包相关教程大全
    go语言闭包相关教程大全

    本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

    145

    2025.07.29

    DOM是什么意思
    DOM是什么意思

    dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

    3833

    2024.08.14

    li是什么元素
    li是什么元素

    li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

    429

    2023.08.03

    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    868

    2026.02.13

    微博网页版主页入口与登录指南_官方网页端快速访问方法
    微博网页版主页入口与登录指南_官方网页端快速访问方法

    本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

    276

    2026.02.13

    Flutter跨平台开发与状态管理实战
    Flutter跨平台开发与状态管理实战

    本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

    178

    2026.02.13

    TypeScript工程化开发与Vite构建优化实践
    TypeScript工程化开发与Vite构建优化实践

    本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

    27

    2026.02.13

    Redis高可用架构与分布式缓存实战
    Redis高可用架构与分布式缓存实战

    本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

    101

    2026.02.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号