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

h4类按钮点击后数据分类未切换,求JS及前端代码排查

问题排查与修复方案

核心问题分析

你的分类切换失效主要是两个CSS问题导致的:

  1. 缺少.hide类的样式定义:JS代码中给元素添加/移除hide类,但CSS里没有对应样式,元素不会隐藏,视觉上看不到切换效果。
  2. filterable_works使用display: contents错误:这个属性会让容器本身消失,子元素直接挂载到上级容器,不仅导致margin-top、gap等布局属性失效,还可能干扰选择器的作用逻辑。

修复后的完整代码

HTML(无需修改)

<div class="filter_buttons2">
  <h4 class="active3" data-name="all2">Pokaż wszystkie</h4>
  <h4 data-name="music">Muzyka</h4>
  <h4 data-name="films">Filmy</h4>
  <h4 data-name="photography">Fotografia</h4>
  <h4 data-name="copywriting">Copywriting</h4>
</div>
<div class="filterable_works">
  <div class="work" data-name="music">
    <p>ddddd</p>
  </div>
  <div class="work" data-name="films">
    <p>gfjdfgjfg</p>
  </div>
  <div class="work" data-name="photography">
    <p>dsfsfgsghdf</p>
  </div>
  <div class="work" data-name="copywriting">
    <p>daaaasadd</p>
  </div>
</div>

CSS(修正关键问题)

.filter_buttons2 {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

h4 {
  padding: 10px 20px;
  font-size: 18px;
  background: #ffffff;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  box-shadow: 0 0 10px #000000;
  transition: background-color 0.2s;
}

h4.active3 {
  background: #670101;
  color: #ffffff;
}

.filterable_works {
  display: flex;
  margin-top: 25px;
  gap: 20px;
  flex-wrap: wrap;
}

.work {
  position: relative;
  max-width: 1300px;
  width: 100%;
  padding: 20px;
  margin: 0;
}

/* 添加hide类样式,实现元素隐藏 */
.hide {
  display: none;
}

JS(逻辑正确,无需修改)

const filterButtons2  = document.querySelectorAll(".filter_buttons2 h4");
const filterableWorks = document.querySelectorAll(".filterable_works .work");

const filterWorks = (e) => {
  document.querySelector(".active3").classList.remove("active3");
  e.target.classList.add("active3");

  filterableWorks.forEach((work) => {
    work.classList.add("hide");
    if (
      work.dataset.name === e.target.dataset.name ||
      e.target.dataset.name === "all2"
    ) {
      work.classList.remove("hide");
    }
  });
};

filterButtons2.forEach((h4) => h4.addEventListener("click", filterWorks));

额外优化提示

  • 用CSS继承简化active3样式,避免重复代码;
  • 给h4添加点击过渡动画,提升交互体验;
  • 新手阶段可尝试事件委托(给.filter_buttons2绑定一次事件),减少事件监听数量,逻辑更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:47