当前位置: 首页 > news >正文

原生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

“知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。” 目录 前言文章有误敬请斧正 不胜感恩&#xff01;||Day07 C#常见数据结构&#xff1a;1. 集合&#xff08;Collection&#xff09;1.1 **List<T>**1.2 **H…...

jvm运行时常量池溢出的原因

Java虚拟机&#xff08;JVM&#xff09;的运行时常量池&#xff08;Runtime Constant Pool&#xff09;是方法区的一部分&#xff0c;用于存储类和接口的常量池表&#xff0c;包括字面量和对类型、字段和方法的符号引用。运行时常量池溢出通常指的是常量池的内存使用达到了JVM设…...

floyd算法详解

算法是一种用于求解所有顶点对之间的最短路径问题的算法&#xff0c;特别适用于稠密图。下面是一个使用C实现的算法示例&#xff1a; #include <iostream> #include <climits> // For INT_MAXusing namespace std;const int V 4; // 图的顶点数// 定义一个函数来…...

Web前端性能优化的方向

减少dom渲染复杂列表优化缓存优化首页背景图片加载慢&#xff0c;可以放在服务器上&#xff0c;读取绝对路径900k的图片大小有些大&#xff0c;可以对图片进行压缩&#xff0c;tinypng网站压缩、熊猫压缩、bing域名下的图片url后面带参数w、h、qlt剪裁下拉框数据较多进行懒加载…...

【面试题】设计模式-责任链模式

设计模式-责任链模式 前言责任链简历案例代码小结 前言 我们知道&#xff0c;设计模式是面试时经常被问到的问题之一&#xff0c;这是因为设计模式能够体现出代码设计的美感&#xff0c;且在很多框架的底层也都会使用到各种设计模式&#xff0c;所以对设计模式的考察&#xff…...

JavaEE 第8节 单例模式详解

目录 概念 饿汉模式 懒汉模式 懒汉模式在多线程环境下的优化 1.线程安全问题 2.效率问题 3.指令重排序导致的问题 1&#xff09;为什么要进行指令重排序&#xff1f; 2&#xff09;指令重排序在上述代码为什么会构成问题&#xff1f; 导读&#xff1a; 单例模式是一种…...

OpenAI 发布 GPT-4o 模型安全评估报告:风险等级为“中等”|TodayAI

OpenAI 近日发布了最新的 GPT-4o 系统卡&#xff0c;这是一份研究文件&#xff0c;详细介绍了公司在推出其最新 AI 模型之前所进行的安全措施和风险评估。根据该评估报告&#xff0c;GPT-4o 的总体风险等级被评定为 “中等” 。 GPT-4o 于今年 5 月首次公开发布。在其发布之前…...

学习前端面试知识

2024-8-9 打卡第十天 学习视频链接 js延迟加载 延迟加载&#xff1a;等页面加载完成后再进行加载提高页面加载速度defer属性&#xff0c;同步加载&#xff0c;让脚本与文档同步解析&#xff0c;顺序执行&#xff0c;当文档解析完成再执行defer&#xff0c;执行完再执行脚本&…...

Leetcode JAVA刷刷站(9)回文数

一、题目概述 二、思路方向 在Java中&#xff0c;判断一个整数是否为回文数&#xff0c;可以通过将该整数转换为字符串&#xff0c;然后比较字符串与其反转后的字符串是否相同来实现。但这种方法在整数非常大时可能不太高效&#xff0c;因为它依赖于字符串操作。一个更高效的方…...

数据结构算法

⩕ 单调栈 1、概念 对于一个栈&#xff0c;维持其单调性&#xff0c;有两种情况&#xff0c;单调递增栈&#xff1a;由栈底到栈顶单调递增 单调递减栈&#xff1a;由栈底到栈顶单调递减 2、核心模板&#xff08; 单调递增栈 &#xff09; stack<int> stk; void …...

WordPress个性化站点

这个信息爆炸的时代&#xff0c;拥有一个能够迅速传达信息、展示个性、并能够与世界互动的在线平台&#xff0c;已成为企业和个人的基本需求。WordPress以其无与伦比的易用性和强大的扩展性&#xff0c;成为了构建此类平台的首选工具。而LNMP是由Linux、Nginx、MySQL和PHP组成的…...

GESP C++ 2024年03月一级真题卷

一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 C表达式 (3 - 2) * 3 5 的值是( )。 A. -13 B. 8 C. 2 D. 0 答案&#xff1a;B 解析&#xff1a;略 第 2 题 C 语句 cout << "5%2" << 5 % 2 执行后的输出是…...

Linux驱动开发基础(Hello驱动)

所学内容来自百问网 目录 1. 文件在内核中的表示 2. 打开字符设备节点时&#xff0c;内核中也有对应的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启动可能报错&#xff1a;elasticsearch 7.10启动报错 bootstrap checks failed解决方法问题原因&#xff1a;注意 退出xshell&#xff0c;重新登录&#xff1a; 上面两个配置项改完后&#xff0c;ES启动用户(es 或root) **…...

互联网应用主流框架整合【Redis数据结构及常用命令】

在大部分情况下我们使用Redis只是执行一些简单的命令操作&#xff0c;通常无需区分是否是在一个连接池里的同一个链接去执行&#xff0c;如果需要执行多条命令&#xff0c;需要保证命令在同一个链接里完成&#xff0c;则采用SessionCallback接口操作即可 Redis数据结构-字符串…...

GORM 自动迁移与命名策略

在现代软件开发中&#xff0c;数据库结构的维护和迁移是常见的挑战之一。GORM&#xff0c;作为 Go 语言中强大的 ORM 库&#xff0c;提供了自动迁移功能&#xff0c;帮助开发者轻松地管理数据库表结构的变更。此外&#xff0c;GORM 还允许开发者通过命名策略&#xff08;Naming…...

python社会科学问题研究的计算实验

实验十五&#xff1a;社会科学问题研究的计算实践 1.实验目标及要求 &#xff08;1&#xff09;掌握网络视角 &#xff08;2&#xff09;掌握社会网络基础内容 &#xff08;3&#xff09;掌握友谊悖论 2.实验主要内容 随机生成一次符合社会网络特征的网络&#xff0c;通过计…...

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…...

解释区块链技术的应用场景和优势-水文

区块链技术是一种去中心化的分布式账本技术&#xff0c;其应用场景和优势如下&#xff1a; 金融领域&#xff1a;区块链可以用于加密货币交易&#xff0c;提供安全的、去中心化的支付系统。它也可以用于股票、债券和其他金融交易的记录和结算&#xff0c;提高交易的透明度和效率…...

Windows双网卡路由配置实战:内外网高效并行访问指南

1. 为什么需要双网卡并行访问内外网&#xff1f; 在企业办公环境中&#xff0c;我们经常遇到这样的场景&#xff1a;电脑需要同时连接内网处理公司业务系统&#xff0c;又要访问外网查询资料或使用云服务。如果频繁切换网络&#xff0c;不仅效率低下&#xff0c;还可能因为操作…...

毫米波雷达开发者必看:双级联方案如何用DDMA波形实现300米精准测距?

毫米波雷达双级联方案实战&#xff1a;DDMA波形设计如何突破300米测距极限&#xff1f; 当特斯拉HW4.0的雷达模块在暴雨中依然稳定输出300米外的障碍物坐标时&#xff0c;背后的技术密码正是双级联架构与DDMA波形的完美融合。作为L3级自动驾驶系统的"全天候之眼"&am…...

VLA模型实战避坑指南:从RT-1到Octo,如何为你的机器人选对架构?

VLA模型实战避坑指南&#xff1a;从RT-1到Octo的架构选型方法论 当机械臂需要根据"把红色积木放在蓝色盒子左侧"的指令完成操作时&#xff0c;工程师面临的第一个决策往往不是算法调参&#xff0c;而是选择哪种VLA&#xff08;Vision-Language-Action&#xff09;架…...

终极解决ComfyUI-Florence2模型加载问题的完整指南

终极解决ComfyUI-Florence2模型加载问题的完整指南 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 如果您正在使用ComfyUI-Florence2视觉语言模型却遇到了加载失败的问题&#…...

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

VS2015C实战&#xff1a;海康MVS工业相机多机同步采图全流程解析 工业视觉检测系统中&#xff0c;多相机同步采图是个经典需求。上周帮朋友调试8台海康威视相机组成的检测线时&#xff0c;发现网上完整案例实在太少。今天我就以VS2015开发环境为例&#xff0c;带大家深入MVS安装…...

避坑指南:微信小程序Painter 2.0海报插件常见问题与优化技巧

避坑指南&#xff1a;微信小程序Painter 2.0海报插件深度优化实战 最近在帮客户重构小程序海报生成功能时&#xff0c;我重新审视了Painter 2.0这个老牌插件。不得不说&#xff0c;经过多次迭代后&#xff0c;它的功能确实强大到令人惊喜——支持从基础文本绘制到复杂阴影效果&…...

Pointer Network:如何解决序列生成中的动态词汇表问题

1. 为什么需要Pointer Network&#xff1f; 想象一下你正在玩一个拼图游戏&#xff0c;每次拿到的拼图块数量都不一样。传统的seq2seq模型就像是一个固定大小的收纳盒——如果这次拼图有50块&#xff0c;下次突然变成100块&#xff0c;你的收纳盒就装不下了。这就是传统序列生成…...

你的QQ空间记忆正在消失?GetQzonehistory帮你永久保存青春时光

你的QQ空间记忆正在消失&#xff1f;GetQzonehistory帮你永久保存青春时光 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里的珍贵回忆会随着时间流逝而消失&#x…...

从仿真到上板:手把手教你用Vivado搭建一个“永不停机”的FFT信号处理链路(附Testbench)

从仿真到上板&#xff1a;构建高可靠FFT信号处理系统的全流程实战 在数字信号处理领域&#xff0c;快速傅里叶变换&#xff08;FFT&#xff09;作为频谱分析的核心算法&#xff0c;其硬件实现一直是FPGA工程师的必备技能。本文将带您从仿真环境搭建开始&#xff0c;逐步完成一…...

Vue项目发版后用户总看到旧页面?3种缓存清理方案实测(含Vue2/Vue3对比)

Vue项目发版后用户总看到旧页面&#xff1f;3种缓存清理方案实测&#xff08;含Vue2/Vue3对比&#xff09; 每次发版后&#xff0c;总有用户反馈"页面没变化"&#xff0c;这可能是浏览器缓存在作祟。作为前端开发者&#xff0c;我们常遇到这类问题——明明服务端已更…...