You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除导航标签的active类?Instagram布局开发问题求助

导航标签Active类移除问题修复

我正在开发类似Instagram的页面布局,尝试多种方法移除导航标签点击后的active类,但均未成功。以下是修复后的完整代码及说明:

修复后的HTML代码

<div class="menu">
  <p data-target="#initial" class="active">Initial</p>
  <p data-target="#product">Product</p>
  <p data-target="#contact">Contact</p>
</div>
<div class="content">
  <div data-content id="initial" class="active">
    <div class="cards">
      <div class="card">
        abc
      </div>
      <div class="card">
        abc
      </div>
      <div class="card">
        abc
      </div>
    </div>
  </div>
  <div data-content id="product">
    <div class="cards">
      <div class="card">
        lmn
      </div>
      <div class="card">
        lmn
      </div>
      <div class="card">
        lmn
      </div>
    </div>
  </div>
  <div data-content id="contact">
    <div class="cards">
      <div class="card">
        xyz
      </div>
      <div class="card">
        xyz
      </div>
      <div class="card">
        xyz
      </div>
    </div>
  </div>
</div>

修复后的CSS代码

*{
  margin:0;
  padding:0;
  box-sizing:border-box;
  font-family: Sans-serif;
}
body{
  padding: 5%;
}
.menu{
  display:flex;
}
.menu p{
  margin-right: 2rem;
  cursor: pointer;
}
.content{
  margin-top:2rem;
}
[data-content]{
  display:none;
}
.active[data-content]{
  display:block;
}
.menu .active{
  text-transform:uppercase;
  color:#FFF;
  background: #000;
  padding:  5px 10px;
  margin-top: -5px;
  border-radius: 50px;
}
.menu p{
  text-transform:uppercase;
}
.cards{
  display:flex;
  flex:1;
  flex-basis: 33.33%;
  max-width: 33.33%;
  min-width: 33.33%;
  height: 100%;
  position: relative;
}
.card{
  border: 1px solid #ccc;
  background: #fff;
}

修复后的JavaScript代码

const targets = document.querySelectorAll('[data-target]');
const content = document.querySelectorAll('[data-content]');

targets.forEach(target => {
  target.addEventListener('click',()=>{
    // 移除所有导航标签的active类
    targets.forEach(t => t.classList.remove('active'));
    // 移除所有内容区块的active类
    content.forEach(c => c.classList.remove('active'));
    
    // 给当前点击的标签和对应内容添加active类
    const t = document.querySelector(target.dataset.target);
    t.classList.add('active');
    target.classList.add('active');
  })
})

问题根源与修复逻辑

原代码仅处理了内容区块的active类移除,遗漏了导航标签的active类清除步骤。每次点击新标签时,需要先遍历所有导航标签移除active类,再给当前点击的标签添加该类,确保同一时刻只有一个标签处于激活状态。

内容的提问来源于stack exchange,提问作者mits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:50:43