Javascript 有什么问题吗?

问题描述 投票:0回答:1

我在一个部分中制作了一个类似按钮的菜单,唯一的问题是单击按钮后数据类别不会改变。 JavaScript 出了什么问题?我有一个类似的菜单,带有按钮而不是 h4,并且有几乎相同的 Javascript,并且它可以工作。预先感谢。

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));
.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;
}

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

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

.work {
  position: relative;
  max-width: 1300px;
  width: 100%;
  padding: 20px;
  margin: 0;
}
<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>

我请求有关 Javascript 的帮助。我是个菜鸟。也许 HTML 或 CSS 代码有错误。

javascript html css menu
1个回答
0
投票

const filterableWorks = document.querySelectorAll('.filterable_works .work');

document.querySelectorAll('.filter_buttons2 h4').forEach( (h4, _, AllH4) => 
  {
  h4.onclick =_=>
    {
    AllH4.forEach( x4 => x4.classList.toggle('active3', x4===h4));
    filterableWorks.forEach( wk => 
      wk.classList.toggle( 'noDisplay'
                           , h4.dataset.name !== 'all2' 
                         &&  h4.dataset.name !== wk.dataset.name 
      ));
    }
  });
.filter_buttons2 {
  display     : flex;
  align-items : center;
  flex-wrap   : wrap;
  gap         : 10px;
  }
h4 {
  padding       : 10px 20px;
  font-size     : 18px;
  background    : white;
  border        : none;
  border-radius : 6px;
  cursor        : pointer;
  box-shadow    : 0 0 10px #000000;
  }
h4.active3 {
  padding       : 10px 20px;
  font-size     : 18px;
  background    : #670101;
  color         : white;
  border        : none;
  border-radius : 6px;
  cursor        : pointer;
  box-shadow    : 0 0 10px #000000;
  }
.filterable_works {
  display    : contents;
  margin-top : 25px;
  gap        : 20px;
  flex-wrap  : wrap;
  }
.work {
  position  : relative;
  max-width : 1300px;
  width     : 100%;
  padding   : 20px;
  margin    : 0;
  }
.noDisplay {
  display: none;
  }
<div class="filter_buttons2">
  <h4 data-name="all2"  class="active3" > 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>

© www.soinside.com 2019 - 2024. All rights reserved.