【问题标题】:What is a better way to do this simple filter with jQuery用 jQuery 做这个简单的过滤器有什么更好的方法
【发布时间】:2017-07-21 13:47:21
【问题描述】:

我正在学习 jQuery 我做了一个简单的选择过滤器,具有基本知识,目的是学习新技术。 我的问题是,有什么更好的可能更复杂的方法来做到这一点: https://codepen.io/frivolta/pen/LLwjjy

$(".elementFilter li").on("click",eventTrigger);

function eventTrigger(){
  var getFilterName = $(this).attr("class");
  if(getFilterName!="all"){
  $(".elementList li:not([data-category='"+getFilterName+"'])").hide(); 
  $(".elementList [data-category='"+getFilterName+"']").show();
  }else{
     $(".elementList li").show();
  }
}


<div class="elements">
  <ul class="elementFilter">
    <li class="all">Show all</li>
    <li class="filterOne">Filter One</li>
    <li class="filterTwo">Filter Two</li>
    <li class="filterThree">Filter Three</li>
    <li class="filterFour">Filter Four</li>
  </ul>
  <ul class="elementList">

    <li data-category="filterOne">Filter One</li>
    <li data-category="filterTwo">Filter Two</li>
    <li data-category="filterThree">Filter Three</li>
    <li data-category="filterFour">Filter Four</li>
  </ul>
</div>

我想分离函数并在它们之间传递参数,如果您有任何建议,我会很高兴听到。 谢谢, F.

【问题讨论】:

    标签: javascript jquery function filter


    【解决方案1】:

    您的代码几乎没问题,但如果您更改在 li 元素中添加一些其他类,它将无法运行。请参阅下面的代码。我用解决方案展示了问题。

    $(".elementFilter li").on("click",eventTrigger);
    
    function eventTrigger(){
      var isClasssAll = $(this).hasClass("all");
      var getFilterName = $(this).attr("data-category");
    
      if(!isClasssAll){
      $(".elementList li:not([data-category='"+getFilterName+"'])").hide(); 
      $(".elementList [data-category='"+getFilterName+"']").show();
      }else{
         $(".elementList li").show();
      }
    }
    
    
    
    <div class="elements">
      <ul class="elementFilter">
        <li class="all asdasd">Show all</li>
        <li data-category="filterOne" class="filterOne 1">Filter One</li>
        <li data-category="filterTwo" class="filterTwo 2">Filter Two</li>
        <li data-category="filterThree" class="filterThree 3">Filter Three</li>
        <li data-category="filterFour" class="filterFour 4">Filter Four</li>
      </ul>
      <ul class="elementList">
    
        <li data-category="filterOne">Filter One</li>
        <li data-category="filterTwo">Filter Two</li>
        <li data-category="filterThree">Filter Three</li>
        <li data-category="filterFour">Filter Four</li>
      </ul>
    </div>
    

    【讨论】:

    • 关于这个,如果我在过滤器上放置更多类,例如
    • 过滤器一
    • 它也不会工作
  • 很好。如果您发现任何其他更好更快的方法来解决您发布的问题,请分享。
  • 如果您没有看到任何其他更好的方法,请参考我的建议代码选择答案。泰
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签