php - JQuery 多重过滤器

标签 php jquery html wordpress

我有一个来自自定义帖子类型的帖子列表。 对于每个帖子,我显示标题、状态和目录:

<div class="adherents">
    <article class="adh-1185 association work adh">
        <h2>Title</h2>
        <div class="metas">
            <span>Address</span>
            <br><span>Statut : Association</span>                               
            <br><span>Catégorie(s) : Work</span>                            
        </div>              
    </article>
    <article class="adh-1346 enterprise work adh">
        <h2>Title</h2>
        <div class="metas">
            <span>Address</span>
            <br><span>Statut : Enterprise</span>
            <br><span>Catégorie(s) : Work</span>
        </div>
    </article>
    <article class="adh-1187 enterprise education adh">
        <h2>Title</h2>
        <div class="metas">
            <span>Address</span>
            <br><span>Statut : Enterprise</span>
            <br><span>Catégorie(s) : Education</span>
        </div>
    </article>
    <article class="adh-1347 other health adh">
        <h2>Title</h2>
        <div class="metas">
            <span>Address</span>
            <br><span>Statut : Othr</span>
            <br><span>Catégorie(s) : Health</span>
        </div>
    </article>
</div>

这是我的 JQuery:

$('.todo input').click( function() {
    var statut = $(this).val();
    var statut = "."+statut;

    if( $(this).is(':checked')){
         $(statut).addClass('checked');
         $('.adh').not('.checked').hide();
         $(statut).show();

    }else{
        //Show all if nothing is checked</strike>
    }

});

这是我的过滤器:

<div class="filtres">
    <div class="statuts">
        <h3>Statut(s) :</h3>
            <label class="todo">
                <input class="todo__state" value="association" type="checkbox">
                <div class="todo__text">Association</div>
            </label>
            <label class="todo">
                <input class="todo__state" value="enterprise" type="checkbox">
                <div class="todo__text">Enterprise</div>
            </label>
            <label class="todo">
                <input class="todo__state" value="other" type="checkbox">
                <div class="todo__text">Other</div>
            </label>
    </div>
    <div class="categories">
        <h3>Categorie(s) :</h3>
            <label class="todo">
                <input class="todo__state" value="work" type="checkbox">
                <div class="todo__text">Work</div>
            </label>
            <label class="todo">
                <input class="todo__state" value="education" type="checkbox">
                <div class="todo__text">Education</div>
            </label>
            <label class="todo">
                <input class="todo__state" value="health" type="checkbox">
                <div class="todo__text">Health</div>
            </label>
    </div>
</div>

我的第一个过滤器工作得很好,但是当我想做多重过滤器状态和类别时。不起作用...单击显示我单击的类别,但不隐藏其他类别或隐藏之前检查的其他过滤器。有什么想法吗?

例如,当我查看状态 1、状态 2 和类别 1 时,我想在类别 2 上显示状态 1、状态 2 中的所有文章并隐藏其他文章。

用户可以按类别或状态或状态和类别通过多重过滤器进行过滤

[已解决]第二个问题:如果没有选中任何内容,如何显示所有文章?

最佳答案

您可以尝试以下代码,它应该可以满足您的要求:

$('.todo input').click(function() {
  $('.adh').hide();
  $('.todo input:checked').each(function() {
    var statut = $(this).val();
    statut = "." + statut;

    if ($(this).parent().parents('.categories').length) {
      $('.adh:visible:not('+statut+')').hide();
    } else {
      $(statut).show();
    }
  })

  if ($('.todo input:checked').length == 0) {
    $('.adh').show();
  }

});

它使用 .each() 循环遍历所有 '.todo input ,即 :checked

演示

$('.todo input').click(function() {
  $('.adh').hide();
  $('.todo input:checked').each(function() {
    var statut = $(this).val();
    statut = "." + statut;

    if ($(this).parent().parents('.categories').length) {
      $('.adh:visible:not('+statut+')').hide();
    } else {
      $(statut).show();
    }
  })

  if ($('.todo input:checked').length == 0) {
    $('.adh').show();
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="adherents">
  <article class="adh-1185 statut1 categorie1 adh">
    <h2>Title</h2>
    <div class="metas">
      <span>Address</span>
      <br><span>Statut : statut1</span>
      <br><span>Catégorie(s) : categorie1</span>
    </div>
  </article>
  <article class="adh-1346 statut2 categorie3 adh">
    <h2>Title</h2>
    <div class="metas">
      <span>Address</span>
      <br><span>Statut : statut2</span>
      <br><span>Catégorie(s) : categorie3</span>
    </div>
  </article>
  <article class="adh-1187 statut2 categorie2 adh">
    <h2>Title</h2>
    <div class="metas">
      <span>Address</span>
      <br><span>Statut : statut2</span>
      <br><span>Catégorie(s) : categorie2</span>
    </div>
  </article>
  <article class="adh-1347 statut3 categorie1 adh">
    <h2>Title</h2>
    <div class="metas">
      <span>Address</span>
      <br><span>Statut : statut3</span>
      <br><span>Catégorie(s) : categorie1</span>
    </div>
  </article>
</div>

<div class="filtres">
  <div class="statuts">
    <h3>Statut(s) :</h3>
    <label class="todo">
                <input class="todo__state" value="statut1" type="checkbox">
                <div class="todo__text">Statut 1</div>
            </label>
    <label class="todo">
                <input class="todo__state" value="statut2" type="checkbox">
                <div class="todo__text">Statut 2</div>
            </label>
    <label class="todo">
                <input class="todo__state" value="statut3" type="checkbox">
                <div class="todo__text">Statut 3</div>
            </label>
  </div>
  <div class="categories">
    <h3>Categorie(s) :</h3>
    <label class="todo">
                <input class="todo__state" value="categorie1" type="checkbox">
                <div class="todo__text">Catégorie 1</div>
            </label>
    <label class="todo">
                <input class="todo__state" value="categorie2" type="checkbox">
                <div class="todo__text">Catégorie 2</div>
            </label>
    <label class="todo">
                <input class="todo__state" value="categorie3" type="checkbox">
                <div class="todo__text">Catégorie 3</div>
            </label>
  </div>
</div>

关于php - JQuery 多重过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823111/

相关文章:

php - Symfony2 表单生成器 - 删除标签,使其成为占位符

php - Codeigniter - 在特定 View 上加载特定的 JS 库

php - 我尝试在 SQL 中进行 INSERT WHERE,但它给了我一个错误

php - 在PHP中使用blowfish存储密码

jquery 动画延迟

javascript - 在鼠标按下事件中选择的两点之间绘制直线

javascript - 使用 javascript 正则表达式使引用的文本变得漂亮

html - div 中的图像在图像下方有额外的空间

html - 在悬停时将过渡应用于 div 中的跨度

javascript - 这个按钮是怎么回事?