用jQuery做这个简单过滤器的更好方法是什么

时间:2017-07-21 13:47:22

标签: javascript jquery function filter

我正在学习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。

1 个答案:

答案 0 :(得分:2)

您的代码几乎没问题,但是如果您更改在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>