【问题标题】:How can I hide/show a div-container in JavaScript?如何在 JavaScript 中隐藏/显示 div 容器?
【发布时间】:2023-03-20 05:50:02
【问题描述】:

我正在尝试使用 toggleClass 方法通过单击按钮来隐藏/显示 div 容器。因此我使用 jQuery。当类 .hide 设置为 visibility: hidden 时,它可以工作。

但是,当我单击按钮时,我想让 div 容器 .aufklapp-container 可见。对于 CSS,我尝试了这个:

.table { visibility: hidden } 
.hide { visibility: visible }

但是 div 容器不会变为可见。它保持隐藏。请帮帮我,我不明白。

$(document).ready(function() {
  $(".aufklapp-button").click(function() {
    $(".aufklapp-container").toggleClass("hide");
  });
});
.aufklapp-button {
  font-family: 'Segoe UI', sans-serif;
  font-weight: bold;
  font-size: 30pt;
  text-align: center;
  color: white;
  background: #7F868D;
  padding: 5px 30px 10px 30px;
  width: 60%;
  border: none;
  border-radius: 35px;
  cursor: pointer;
}

.table {
  font-family: 'Segoe UI', sans-serif;
  font-size: 15pt;
  text-align: left;
  width: 60%;
  padding: 10px 30px 20px 40px;
  border-color: #8D0011;
  border-width: 2px;
  border-style: solid;
  border-bottom-left-radius: 10px;
  border-bottom-right-radius: 10px;
  background: white;
  visibility: hidden;
}

.table td {
  padding: 7px 20px 7px 20px;
}

.table td:nth-child(2) {
  width: 45%;
}

.hide {
  visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div id="container-button">
  <input class="aufklapp-button" type="button" value="Platzhalter für Kategorie"></input>
  <div class="aufklapp-container">
    <table class="table">
      <tbody>
        <tr>
          <td></td>
          <td>Zielerreichung in %</td>
        </tr>
        <tr>
          <td>Kriterium 1</td>
          <td>Regler</td>
        </tr>
        <tr>
          <td>Kriterium 2</td>
          <td>Regler</td>
        </tr>
        <tr>
          <td>Kriterium 3</td>
          <td>Regler</td>
        </tr>
        <tr>
          <td>Kriterium 4</td>
          <td>Regler</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery css typescript toggle


    【解决方案1】:

    问题是因为您在table 元素上设置了visibility: hidden,而不是父.aufklapp-container,因此切换类没有任何作用。如果您将 visibility 属性移动到 CSS 中的正确类,则代码有效:

    $(document).ready(function() {
      $(".aufklapp-button").click(function() {
        $(".aufklapp-container").toggleClass("hide");
      });
    });
    .aufklapp-button {
      font-family: 'Segoe UI', sans-serif;
      font-weight: bold;
      font-size: 30pt;
      text-align: center;
      color: white;
      background: #7F868D;
      padding: 5px 30px 10px 30px;
      width: 60%;
      border: none;
      border-radius: 35px;
      cursor: pointer;
    }
    
    .aufklapp-container {
      visibility: hidden;
    }
    
    .table {
      font-family: 'Segoe UI', sans-serif;
      font-size: 15pt;
      text-align: left;
      width: 60%;
      padding: 10px 30px 20px 40px;
      border-color: #8D0011;
      border-width: 2px;
      border-style: solid;
      border-bottom-left-radius: 10px;
      border-bottom-right-radius: 10px;
      background: white;
    }
    
    .table td {
      padding: 7px 20px 7px 20px;
    }
    
    .table td:nth-child(2) {
      width: 45%;
    }
    
    .hide {
      visibility: visible;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <div id="container-button">
      <input class="aufklapp-button" type="button" value="Platzhalter für Kategorie" />
      <div class="aufklapp-container">
        <table class="table">
          <tbody>
            <tr>
              <td></td>
              <td>Zielerreichung in %</td>
            </tr>
            <tr>
              <td>Kriterium 1</td>
              <td>Regler</td>
            </tr>
            <tr>
              <td>Kriterium 2</td>
              <td>Regler</td>
            </tr>
            <tr>
              <td>Kriterium 3</td>
              <td>Regler</td>
            </tr>
            <tr>
              <td>Kriterium 4</td>
              <td>Regler</td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>

    另外,顺便说一句,将hide 类重命名为show 会更有意义,因为这更符合它的行为。

    【讨论】:

      【解决方案2】:

      除了前面给出的之外,另一种选择是稍微更改代码,将 JavaScript 代码更改为:

      $(document).ready(function() {
        var aufklapp = $(".aufklapp-container");
        $(".aufklapp-button").click(function() {
          aufklapp.attr("hidden", aufklapp.attr('hidden') ? null : true);
        });
      });
      

      并将 hidden 属性添加到 HTML 元素作为 &lt;div class="aufklapp-container" hidden&gt; 和 CSS 上的最后一个,从 .table 类中删除 .hide 类和 visibility: hidden; 属性。

      .table {
        font-family: 'Segoe UI', sans-serif;
        font-size: 15pt;
        text-align: left;
        width: 60%;
        padding: 10px 30px 20px 40px;
        border-color: #8D0011;
        border-width: 2px;
        border-style: solid;
        border-bottom-left-radius: 10px;
        border-bottom-right-radius: 10px;
        background: white;
      }
      
      .table td {
        padding: 7px 20px 7px 20px;
      }
      
      .table td:nth-child(2) {
        width: 45%;
      }
      

      这将为您的代码带来 3 个好处:(1) 使用标记上的 hidden 属性提供更好的可访问性(如果需要,您可以与其他人一起使用它ARIA attributes); (2) 你通过引用缓存你的容器,避免在每次点击时使用 jQuery 代码$(".aufklapp-container") 获取它; (3) 在你的代码库中少了一个 CSS 泛型类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        相关资源
        最近更新 更多