原生js: 实现三个水平tab按钮, 默认第一个上面有class, 点击另外的实现class=‘cur‘的切换的效果
问:
<ul><li class="cur">热门问题</li><li>订阅问题</li><li>使用问题</li></ul>
这是我的代码,
这是我的代码:
// 遍历 helpInfoClass 数组helpInfoClass.forEach((item, index) => {var itemId = item[0];var itemName = item[1];// 跳过最后一个人工客服问题if (index === helpInfoClass.length - 1) {return;}// 创建 li 元素var liElement = document.createElement('li');// 将第一个常见问题改为热门问题if (index === 0) {liElement.textContent = "热门问题";liElement.classList.add('cur'); // 添加 cur class} else {liElement.textContent = itemName;}// 将 li 元素添加到 ul 元素中ulElement.appendChild(liElement);});
这是helpInfoClass:的数据格式:
[[1,"常见问题"],[2,"订阅问题"],[3,"使用问题"],[4,"人工客服"]
]
我希望: 点击订阅问题, class='cur'转移到订阅问题的li标签上,其他的li标签不再有class='cur',同时我希望获取到这个li标签的唯一标识,知道我点击的是哪一个li标签,如我点击订阅问题我希望我能有一个订阅问题li标签的唯一标识,点击使用问题有一个唯一标识
回答:
要实现你的需求,你可以在点击每个 `<li>` 标签时进行以下操作:1. 移除所有 `<li>` 标签上的 `cur` 类。
2. 将 `cur` 类添加到当前点击的 `<li>` 标签上。
3. 获取当前点击的 `<li>` 标签的唯一标识,即 `helpInfoClass` 数组中对应项的第一个元素。下面是你可以采取的实现方法,假设你有一个 `<ul>` 元素和一个 `helpInfoClass` 数组,HTML 结构如下:<ul id="ulElement"><li class="cur">热门问题</li><li>订阅问题</li><li>使用问题</li>
</ul>JavaScript 部分的代码可以这样写:// 假设已经有 helpInfoClass 数组和 ulElement 元素的引用// 获取 ul 元素
var ulElement = document.getElementById('ulElement');// 遍历每个 li 元素并为其添加点击事件监听器
ulElement.querySelectorAll('li').forEach((liElement, index) => {// 添加点击事件监听器liElement.addEventListener('click', () => {// 移除所有 li 元素上的 cur 类ulElement.querySelectorAll('li').forEach(item => {item.classList.remove('cur');});// 添加 cur 类到当前点击的 li 元素上liElement.classList.add('cur');// 获取当前点击的 li 元素对应的唯一标识var itemId = helpInfoClass[index][0];console.log("点击的唯一标识是:", itemId);});
});这段代码的关键点如下:
- 使用 `querySelectorAll('li')` 获取所有 `<li>` 元素,然后为每个 `<li>` 元素添加点击事件监听器。
- 在点击事件处理程序中,首先移除所有 `<li>` 元素上的 `cur` 类,然后为当前点击的 `<li>` 元素添加 `cur` 类。
- 通过 `helpInfoClass[index][0]` 获取当前点击的 `<li>` 元素对应的唯一标识,其中 `index` 是当前点击的 `<li>` 在 `helpInfoClass` 数组中的索引。这样就可以实现你的需求:点击不同的 `<li>` 标签时,该标签会获得 `cur` 类,而其他标签则会失去该类,并且可以获取到对应 `<li>` 标签的唯一标识。默认进入界面第一个元素上游class='cur':
document.addEventListener('DOMContentLoaded', function() {// 获取 ul 元素var ulElement = document.getElementById('ulElement');// 找到热门问题的 li 标签(假设是第一个)var hotIssueLi = ulElement.querySelector('li');// 给热门问题的 li 标签添加 cur 类hotIssueLi.classList.add('cur');
});
问:
ulElement.querySelectorAll('li').forEach((liElement, index) => {liElement.addEventListener('click', () => {// 移除所有 li 元素上的 cur 类ulElement.querySelectorAll('li').forEach(item => {item.classList.remove('cur');});// 添加 cur 类到当前点击的 li 元素上liElement.classList.add('cur');// 获取当前点击的 li 元素对应的唯一标识var itemId = helpInfoClass[index][0];// 根据 itemId 的值展示不同的问题类型if (itemId === 1) {// 展示热门问题console.log("展示热门问题");// 这里可以进行具体展示热门问题的操作} else if (itemId === 2) {// 展示所有订阅问题console.log("展示所有订阅问题");// 这里可以进行具体展示所有订阅问题的操作} else if (itemId === 3) {// 展示所有使用问题console.log("展示所有使用问题");// 这里可以进行具体展示所有使用问题的操作} else {// 展示未知问题console.log("展示所有未知问题");// 这里可以进行具体展示所有未知问题的操作}});
});这是我的逻辑代码, 是可以正常使用的非常好,
下面有一个helpInfoText数据:
[[1,"财新的哪些内容需要付费阅读1?",],[1,"财新的哪些内容需要付费阅读1?",],[2,"财新的哪些内容需要付费阅读2?",],[2,"财新的哪些内容需要付费阅读2?",],[3,"财新的哪些内容需要付费阅读3?",],[3,"财新的哪些内容需要付费阅读3?",]
],我希望你帮我遍历, 当我选中热门问题的时候遍历出热门问题的"财新的哪些内容需要付费阅读1?"文字,当我点击订阅问题的时候,帮我遍历出:"财新的哪些内容需要付费阅读2?"的文字,当我点击使用问题的时候,帮我遍历出使用问题的:"财新的哪些内容需要付费阅读3?"文字
回答:
为了根据选中的项展示对应的问题文字,你可以根据以下方法在点击事件处理函数中添加逻辑:ulElement.querySelectorAll('li').forEach((liElement, index) => {liElement.addEventListener('click', () => {// 移除所有 li 元素上的 cur 类ulElement.querySelectorAll('li').forEach(item => {item.classList.remove('cur');});// 添加 cur 类到当前点击的 li 元素上liElement.classList.add('cur');// 获取当前点击的 li 元素对应的唯一标识var itemId = helpInfoClass[index][0];// 根据 itemId 的值展示不同的问题类型if (itemId === 1) {// 展示热门问题console.log("展示热门问题");// 遍历并输出热门问题的文字内容helpInfoText.forEach(item => {if (item[0] === 1) {console.log(item[1]);}});} else if (itemId === 2) {// 展示所有订阅问题console.log("展示所有订阅问题");// 遍历并输出订阅问题的文字内容helpInfoText.forEach(item => {if (item[0] === 2) {console.log(item[1]);}});} else if (itemId === 3) {// 展示所有使用问题console.log("展示所有使用问题");// 遍历并输出使用问题的文字内容helpInfoText.forEach(item => {if (item[0] === 3) {console.log(item[1]);}});} else {// 展示未知问题console.log("展示所有未知问题");// 这里可以进行具体展示所有未知问题的操作}});
});在这段代码中,针对每个选项的点击事件,我添加了遍历 `helpInfoText` 数组的逻辑。根据 `itemId` 的值(1、2、3),分别输出对应类型的问题文字内容。例如,当点击热门问题时,会输出所有 `helpInfoText` 中 `itemId` 为 1 的问题文字;点击订阅问题时,会输出 `itemId` 为 2 的问题文字;点击使用问题时,会输出 `itemId` 为 3 的问题文字。
相关文章:
原生js: 实现三个水平tab按钮, 默认第一个上面有class, 点击另外的实现class=‘cur‘的切换的效果
问: <ul><li class"cur">热门问题</li><li>订阅问题</li><li>使用问题</li></ul> 这是我的代码, 这是我的代码: // 遍历 helpInfoClass 数组helpInfoClass.forEach((item, index) > {var itemId item[0];var i…...
C#语言基础速成Day07
“知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。” 目录 前言文章有误敬请斧正 不胜感恩!||Day07 C#常见数据结构:1. 集合(Collection)1.1 **List<T>**1.2 **H…...
jvm运行时常量池溢出的原因
Java虚拟机(JVM)的运行时常量池(Runtime Constant Pool)是方法区的一部分,用于存储类和接口的常量池表,包括字面量和对类型、字段和方法的符号引用。运行时常量池溢出通常指的是常量池的内存使用达到了JVM设…...
floyd算法详解
算法是一种用于求解所有顶点对之间的最短路径问题的算法,特别适用于稠密图。下面是一个使用C实现的算法示例: #include <iostream> #include <climits> // For INT_MAXusing namespace std;const int V 4; // 图的顶点数// 定义一个函数来…...
Web前端性能优化的方向
减少dom渲染复杂列表优化缓存优化首页背景图片加载慢,可以放在服务器上,读取绝对路径900k的图片大小有些大,可以对图片进行压缩,tinypng网站压缩、熊猫压缩、bing域名下的图片url后面带参数w、h、qlt剪裁下拉框数据较多进行懒加载…...
【面试题】设计模式-责任链模式
设计模式-责任链模式 前言责任链简历案例代码小结 前言 我们知道,设计模式是面试时经常被问到的问题之一,这是因为设计模式能够体现出代码设计的美感,且在很多框架的底层也都会使用到各种设计模式,所以对设计模式的考察ÿ…...
JavaEE 第8节 单例模式详解
目录 概念 饿汉模式 懒汉模式 懒汉模式在多线程环境下的优化 1.线程安全问题 2.效率问题 3.指令重排序导致的问题 1)为什么要进行指令重排序? 2)指令重排序在上述代码为什么会构成问题? 导读: 单例模式是一种…...
OpenAI 发布 GPT-4o 模型安全评估报告:风险等级为“中等”|TodayAI
OpenAI 近日发布了最新的 GPT-4o 系统卡,这是一份研究文件,详细介绍了公司在推出其最新 AI 模型之前所进行的安全措施和风险评估。根据该评估报告,GPT-4o 的总体风险等级被评定为 “中等” 。 GPT-4o 于今年 5 月首次公开发布。在其发布之前…...
学习前端面试知识
2024-8-9 打卡第十天 学习视频链接 js延迟加载 延迟加载:等页面加载完成后再进行加载提高页面加载速度defer属性,同步加载,让脚本与文档同步解析,顺序执行,当文档解析完成再执行defer,执行完再执行脚本&…...
Leetcode JAVA刷刷站(9)回文数
一、题目概述 二、思路方向 在Java中,判断一个整数是否为回文数,可以通过将该整数转换为字符串,然后比较字符串与其反转后的字符串是否相同来实现。但这种方法在整数非常大时可能不太高效,因为它依赖于字符串操作。一个更高效的方…...
数据结构算法
⩕ 单调栈 1、概念 对于一个栈,维持其单调性,有两种情况,单调递增栈:由栈底到栈顶单调递增 单调递减栈:由栈底到栈顶单调递减 2、核心模板( 单调递增栈 ) stack<int> stk; void …...
WordPress个性化站点
这个信息爆炸的时代,拥有一个能够迅速传达信息、展示个性、并能够与世界互动的在线平台,已成为企业和个人的基本需求。WordPress以其无与伦比的易用性和强大的扩展性,成为了构建此类平台的首选工具。而LNMP是由Linux、Nginx、MySQL和PHP组成的…...
GESP C++ 2024年03月一级真题卷
一、单选题(每题 2 分,共 30 分) 第 1 题 C表达式 (3 - 2) * 3 5 的值是( )。 A. -13 B. 8 C. 2 D. 0 答案:B 解析:略 第 2 题 C 语句 cout << "5%2" << 5 % 2 执行后的输出是…...
Linux驱动开发基础(Hello驱动)
所学内容来自百问网 目录 1. 文件在内核中的表示 2. 打开字符设备节点时,内核中也有对应的struct file 3. 编写驱动程序步骤 4. 相关知识点 4.1 涉及函数解析 4.2 module_init/module_exit的实现 4.3 register_chrdev的内部实现 4.4 class_destroy/device_…...
centos7安装 ES集群 elasticsearch
这里写自定义目录标题 编写启动脚本 elasticsearch.sh启动可能报错:elasticsearch 7.10启动报错 bootstrap checks failed解决方法问题原因:注意 退出xshell,重新登录: 上面两个配置项改完后,ES启动用户(es 或root) **…...
互联网应用主流框架整合【Redis数据结构及常用命令】
在大部分情况下我们使用Redis只是执行一些简单的命令操作,通常无需区分是否是在一个连接池里的同一个链接去执行,如果需要执行多条命令,需要保证命令在同一个链接里完成,则采用SessionCallback接口操作即可 Redis数据结构-字符串…...
GORM 自动迁移与命名策略
在现代软件开发中,数据库结构的维护和迁移是常见的挑战之一。GORM,作为 Go 语言中强大的 ORM 库,提供了自动迁移功能,帮助开发者轻松地管理数据库表结构的变更。此外,GORM 还允许开发者通过命名策略(Naming…...
python社会科学问题研究的计算实验
实验十五:社会科学问题研究的计算实践 1.实验目标及要求 (1)掌握网络视角 (2)掌握社会网络基础内容 (3)掌握友谊悖论 2.实验主要内容 随机生成一次符合社会网络特征的网络,通过计…...
Element Plus 发布 2.8.0
功能特性 组件更新 [color-picker] alpha-slider a11y (#14245 by tolking)添加 mention 组件 (#17586 by Fuphoenixes)[tree-v2] 添加 scrollTo 方法 (#14050 by kaine0923)[drawer] 添加 append-to 属性 (#17761 by tolking)[table] tree children 添加严格检查 (#13519 by t…...
解释区块链技术的应用场景和优势-水文
区块链技术是一种去中心化的分布式账本技术,其应用场景和优势如下: 金融领域:区块链可以用于加密货币交易,提供安全的、去中心化的支付系统。它也可以用于股票、债券和其他金融交易的记录和结算,提高交易的透明度和效率…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
