提问者:小点点

Classlist切换不添加/切换div的类名


我的目标是在每次按下按钮时显示一个列表,就像一个下拉列表,所以我做了一个测试html,css和js文件,但不知怎么的,它不起作用,我的js代码中的日志函数在控制台输出单词'year',但类列表切换似乎没有改变/添加div类上的“active”。

下面是我的JS。

function btnFunction(identifier){
console.log(identifier)
var element = document.getElementById(identifier);
element.classList.toggle("active");}

下面是我的HTML。

<div class="modal-content-col-6-drop">
  <button onclick="btnFunction('year')" class="drop-btn">sample</button>
</div>

 <div id="year" class="select">
    <ul>
      <li>0 Year</li>
      <li>1 Year</li>
    </ul>
 </div>

下面是我的CSS。

#year{
  display: none;
}
.active{
  display: block;
}



    

共2个答案

匿名用户

基于id的css选择器优先于基于类的css选择器。 因此id year将始终为display:none,即使该类处于活动状态。 因此,最好的解决方案是不对css选择器使用ID。

更好的解决办法是

.select{
  display: none;
}
.select.active{
  display: block;
}

您可以在这里阅读关于选择器特异性的更多信息。

我将在这里包括一个片段来说明这一点:

null

function btnFunction(identifier){
    console.log(identifier)
    var element = document.getElementById(identifier);
    element.classList.toggle("active");
}
.select{
  display: none;
}
.select.active{
  display: block;
}
<html>
<body>
<div class="modal-content-col-6-drop">
  <button onclick="btnFunction('year')" class="drop-btn">sample</button>
</div>

 <div id="year" class="select">
    <ul>
      <li>0 Year</li>
      <li>1 Year</li>
    </ul>
 </div>
 </body>
 </html>

匿名用户

您需要在css中添加!重要

null

function btnFunction(identifier) {
  console.log(identifier)
  var element = document.getElementById(identifier);
  element.classList.toggle("active");
}
#year{
  display: none;
}
.active{
  display: block !important;
}
<div class="modal-content-col-6-drop">
  <button onclick="btnFunction('year')" class="drop-btn">sample</button>
</div>

 <div id="year" class="select">
    <ul>
      <li>0 Year</li>
      <li>1 Year</li>
    </ul>
 </div>