原生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…...
解释区块链技术的应用场景和优势-水文
区块链技术是一种去中心化的分布式账本技术,其应用场景和优势如下: 金融领域:区块链可以用于加密货币交易,提供安全的、去中心化的支付系统。它也可以用于股票、债券和其他金融交易的记录和结算,提高交易的透明度和效率…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...