多个同样式的div层的tab切换模块如何避免 不兼容,
<ul class="tabs"> <li cc-status="" flex="1" data-target="fuhuo3">Tab 1</li> <li cc-status="" flex="1" data-target="fuhuo4">Tab 2</li> <!-- 其他 tab 项 --> </ul> <div class="tabs-chain"> <div gap="2xl" class="index-section" id="fuhuo3"> 111 </div> <div gap="2xl" class="index-section" id="fuhuo4"> 222 </div> <!-- 其他内容区域 --> </div>
// 选择所有包含 tab 的容器 const tabContainers = document.querySelectorAll('.index-section--wide, .subcontents'); tabContainers.forEach((container) => { const tabs = container.querySelectorAll('.tabs li'); // 初始化 if (tabs.length > 0) { const firstTab = tabs[0]; firstTab.setAttribute('cc-status', 'active'); const targetId = firstTab.dataset.target; const targetContent = document.getElementById(targetId); if (targetContent) { targetContent.style.display = 'block'; } } tabs.forEach((tab) => { tab.addEventListener('click', (e) => { e.preventDefault(); // 移除所有 tab 的激活状态 tabs.forEach((t) => t.setAttribute('cc-status', '')); // 激活当前点击的 tab tab.setAttribute('cc-status', 'active'); // 获取当前点击 tab 对应的内容区域的 id const targetId = tab.dataset.target; if (!targetId) { console.error('当前 tab 未设置 data - target 属性'); return; } // 隐藏所有内容区域 const allContents = container.querySelectorAll('.tabs-chain > *'); allContents.forEach((content) => { content.style.display = 'none'; }); // 显示对应的内容区域 const targetContent = document.getElementById(targetId); if (targetContent) { targetContent.style.display = 'block'; } else { console.error(`未找到 id 为 ${targetId} 的内容区域`); } }); }); });
代码解释
按照上述方式修改 HTML 并使用优化后的 JavaScript 代码,应该可以解决 fuhuo3
和 fuhuo4
切换不正常的问题。你可以将优化后的代码放在 HTML 文件的 <script>
标签内,或者单独保存为一个 .js
文件并在 HTML 中引入,同时打开浏览器开发者工具查看控制台是否有错误信息。