Jquery 通过复选框过滤列表 DIV

标签 jquery

您好,我有一份公寓列表,我需要通过复选框按类型(例如工作室、1 间卧室、2 间卧室。)过滤它们。 您可以在 http://jsfiddle.net/YByCk/1/ 观看演示 如果您选择 1 间卧室和 2 间卧室来显示 1 间卧室和 2 间卧室的结果(如果已选中 1),我不知道如何进行此操作。 问题是,当您选中第二个复选框时,将仅显示最后一个复选框过滤器,而不会保留选中的其他复选框。

//function count results after filter
 function divcount()
 {
     var resCount =  $('.listing').filter(":visible").size();
     //alert(resCount)
     $("#contResults").html(resCount + ' results');
 }
  //bedrooms filter

$("#Studio").click(function(){
 if($("#Studio").is(':checked'))
       {              
         $('.listing[bedrooms!="Studio"]').hide();
         divcount();             
       }
  if(!$("#Studio").is(':checked'))
       {              
        $('.listing[bedrooms!="Studio"]').show();
        divcount();    
       }       
   });

$("#1B").click(function(){
 if($("#1B").is(':checked'))
       {              
         $('.listing[bedrooms!="1 Bedroom"]').hide();
         divcount();         
       }
  if(!$("#1B").is(':checked'))
       {              
        $('.listing[bedrooms!="1 Bedroom"]').show();
        divcount();        
       }       
   });

$("#2B").click(function(){
 if($("#2B").is(':checked'))
       {              
         $('.listing[bedrooms!="2 Bedroom"]').hide();
         divcount();             
       }
  if(!$("#2B").is(':checked'))
       {              
        $('.listing[bedrooms!="2 Bedroom"]').show();
        divcount();    
       }       
   });

$("#3B").click(function(){
 if($("#3B").is(':checked'))
       {              
         $('.listing[bedrooms!="3 Bedroom"]').hide();
         divcount();             
       }
  if(!$("#3B").is(':checked'))
       {              
        $('.listing[bedrooms!="3 Bedroom"]').show();
        divcount();    
       }       
   });
$("#4B").click(function(){
 if($("#4B").is(':checked'))
       {              
         $('.listing[bedrooms!="4 Bedroom"]').hide();
         divcount();             
       }
  if(!$("#4B").is(':checked'))
       {              
        $('.listing[bedrooms!="4 Bedroom"]').show();
        divcount();    
       }       
   });
$("#5B").click(function(){
 if($("#5B").is(':checked'))
       {              
         $('.listing[bedrooms!="5 Bedroom"]').hide();
         divcount();             
       }
  if(!$("#5B").is(':checked'))
       {              
        $('.listing[bedrooms!="5 Bedroom"]').show();
        divcount();    
       }       
   }); 

有什么想法吗?

谢谢

最佳答案

我简化了您的代码并使用 data 属性来存储卧室数量。

HTML

<input data-bedrooms="1" type="checkbox">1 bedroom<br>
<input data-bedrooms="2" type="checkbox">2 bedrooms<br>
<input data-bedrooms="3" type="checkbox">3 bedrooms<br>
<ul>
    <li data-bedrooms="1">1 bedroom apartment</li>
    <li data-bedrooms="1">1 bedroom apartment</li>
    <li data-bedrooms="3">3 bedroom apartment</li>
    <li data-bedrooms="2">2 bedroom apartment</li>
    <li data-bedrooms="2">2 bedroom apartment</li>
    <li data-bedrooms="2">2 bedroom apartment</li>
    <li data-bedrooms="3">3 bedroom apartment</li>
    <li data-bedrooms="2">2 bedroom apartment</li>
    <li data-bedrooms="1">1 bedroom apartment</li>
    <li data-bedrooms="2">2 bedroom apartment</li>
</ul>

JQUERY

$('input').change(function(){
    $('input').each(function(){
        var checked = $(this).attr('checked') || false;
        var numberofrooms = $(this).data('bedrooms');
        $('li').each(function(){
            if ($(this).data('bedrooms')==numberofrooms){
                checked ? $(this).show() : $(this).hide();
            }
        });
    });
});

差不多就这些了。查看jsfiddle .

编辑

我又折腾了一些,然后想出了这个:

$('input').change(function(){
    var allchecked=0;
    $('input').each(function(){
        var checked;
        if (checked = $(this).attr('checked')) {allchecked++};
        var numberofrooms = $('li[data-bedrooms='+$(this).data('bedrooms')+']');
        checked ?  numberofrooms.show('slow'): numberofrooms.hide('slow');
    });
    if(allchecked==0){$('li').show('slow');}
});

我认为它更优雅,如果没有选中任何复选框,现在将显示所有列表。 Example here .

关于Jquery 通过复选框过滤列表 DIV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180129/

相关文章:

jquery - Asp.net 和 Jquery 返回数据错误

javascript - 如何从JQuery AJAX生成的HTML数据中获取属性id? JavaScript

jquery - 如何使用 Microsoft 认知服务 - 说话人识别 API

javascript - 我想关闭在触摸(单击)切换按钮时出现的下拉菜单。(移动 View )

javascript - 日期选择器不突出显示所选日期

javascript - 调试 JavaScript 事件

jquery - 我怎样才能让这个插件不超过屏幕?

javascript - 提供 setInterval 的 ID 并通过 ID 清除

jquery - 有条件地阻止下拉选择的更新

javascript - 在ajax加载的div中注入(inject)脚本