【问题标题】:Sorting With JS/jQuery Show() + Hide() if id has specific class?如果 id 有特定的类,使用 JS/jQuery Show() + Hide() 排序?
【发布时间】:2020-10-12 23:57:54
【问题描述】:

我正在尝试编写一个代码,根据它们的类名对 div 进行排序,并带有切换 show(); 的按钮;如果该类存在但 hide();如果该类不存在。我没有收到任何错误,但代码不想按照我认为我告诉它的方式工作?当您在我的预览中单击按钮时,它会隐藏具有类名的 id,而对没有类名的 id 则不执行任何操作。

CSS


排序
会员名 - 狮子
会员名-老虎
会员名-熊
正文>

标签: javascript jquery


【解决方案1】:

您可以使用更通用的方法来完成此操作,对所有按钮使用一键式侦听器,并检查事件发生所在的 ID 并做出相应反应

const $items = $('.sort-hold').children()

$('.sort-button').click(function(){
   // remove active class from other buttons
   $('.sort-button.active').removeClass('active');
   // make this button active
   $(this).addClass('active');
   // hide/show logic
   if(this.id === 'everyone'){
      $items.show()
   }else{
      $items.hide().filter('.' + this.id).show();   
   }

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="sort-box"><div id="button-wrap">
<button id="everyone" class="sort-button active">everyone</button>
<button id="lions" class="sort-button">lions</button>
<button id="tigers" class="sort-button">tigers</button>
<button id="bears" class="sort-button">bears</button>
</div>

<div class="sort-hold">
    <div  class="lions all">member name - lion</div>
    <div  class="tigers all">member name - tiger</div>
    <div  class="bears all">member name - bear</div>
</div>
</div>

【讨论】:

    【解决方案2】:

    这是我的解决方案。

    everyone 类添加到每个人 btn 并将 sort-hold member 替换为类名而不是 id

    <div id="sort-box"><div id="button-wrap">
    <button id="everyone" class="sort-button everyone active">everyone</button>
    <button id="lions" class="sort-button">lions</button>
    <button id="tigers" class="sort-button">tigers</button>
    <button id="bears" class="sort-button">bears</button>
    <textarea id="search" class="sort-button" placeholder="search"></textarea></div>
    
    <div class="sort-hold">
        <div class="lions all member">member name - lion</div>
        <div class="tigers all member">member name - tiger</div>
        <div class="bears all member">member name - bear</div>
    </div>
    </div>
    
    
        <script type="text/javascript" src="https://files.jcink.net/uploads2/colourcoded/jquery.js"></script>
        <script type="text/javascript" src="https://files.jcink.net/uploads2/colourcoded/jquery_ui.js"></script>
    

    修复 #member.member

    .member {
      margin: 10px;
      width: calc(100% - 70px);
      height: 50px;
      line-height: 50px;
      padding: 0px 25px;
      text-transform: uppercase;
      font-family: arial;
      background: #fff;
      font-size: 10px;
      outline: 1px solid #ddd;
      outline-offset: -1px;
    }
    
    // Get the container element
    var btnWrap = document.getElementById("button-wrap");
    
    // Get all buttons with class="btn" inside the container
    var btns = btnWrap.getElementsByClassName("sort-button");
    
    // Loop through the buttons and add the active class to the current/clicked button
    for (var i = 0; i < btns.length; i++) {
      btns[i].addEventListener("click", function() {
        var current = document.getElementsByClassName("active");
        current[0].className = current[0].className.replace(" active", "");
        this.className += " active";
      });
    }
    
    
    $("#everyone").click(sortEveryone);
    function sortEveryone() { 
        console.log("button clicked!")
        $(".member").show();
    }
    
    // add activeBtn function for all btns except .everyone
    for (var btn of btns) {
        $(btn).hasClass("everyone") == false ? btn.addEventListener("click", activeBtn) : "";
    }
    
    function activeBtn(e) {
      let targetId = e.target.id;
      let members = $(".member");
    
      // if the member class has the same name as the btn id, show it else hide it
      for (var member of members) {
        $(member).hasClass(targetId) ? $(member).show() : $(member).hide();
      }
    }
    

    我已将 #member 更改为 .member,拥有多个具有相同 id 的元素并不是一个好方法。

    并且我已经为大家 btn 添加了 .everyone 以使其更易于处理。

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      相关资源
      最近更新 更多