javascript - <div>过滤器中的<div>过滤器

标签 javascript jquery

我有红色、蓝色、绿色和金色的三 Angular 形、正方形、圆形。我需要对颜色和形状进行过滤。例如,如果我选择红色和圆圈,我只会看到一个红色圆圈 此代码 HTML:

<table border="0">
<tr>
    <td width="20%" >
        <div id="triangleRed" class="color Red triangle"></div>
        <div id="triangleBlue" class="color Blue triangle"></div>
        <div id="triangleGreen" class="color Green triangle"></div>
        <div id="triangleGold" class="color Gold triangle"></div>
    </td>
   <td width="20%" align="center">
        <div id="squareRed" class="color Red square"></div>
        <div id="squareBlue" class="color Blue square"></div>
        <div id="squareGreen" class="color Green square"></div>
        <div id="squareGold" class="color Gold square"></div>
    </td>
    <td width="40%" align="center">
        <div id="circleRed" class="color Red circle"></div>
        <div id="circleBlue" class="color Blue circle"></div>
        <div id="circleGreen" class="color Green circle"></div>
        <div id="circleGold" class="color Gold circle"></div>
    </td>
    <td width="40%" >
        Filter:
        <br/>
        <div class="searchColor" id="filterColor">
            <div class="searchTextColor"> Color: </div>

            <input type="checkbox"  id="Red"  value="Red" />Red
            <br/>
            <input type="checkbox"  id="Blue"   value="Blue"/>Blue
            <br/>
            <input type="checkbox"  id="Green"  value="Green"/>Green
            <br/>
            <input type="checkbox" id="Gold"   value="Gold"/>Gold
            <p/>
        </div>
        <div class="searchColor" id="searchShape">
            <div class="searchShape"> Shape:</div>
            <div class="paintSelect">
                <input type="checkbox" id="triangle"  value="triangle" />triangle
                <br/>
                <input type="checkbox" id="circle"  value="circle"/>circle
                <br/>
                <input type="checkbox" id="square" value="square"/>square
            </div>
        </div>
    </td>
</tr>

我已经为过滤器编写了这段代码:

$(document).ready(function() {

$("div[class='searchColor'] input").change(function () {
        var k = this.value;
    switch ($('input:checked').length) {

        case 0:
            $('.color').show();
            return;
        case 1:
            if (this.checked) {
                $('.color').hide();
            }
    }
    if($("div [class='paintSelect'] input").checked){
                    if (this.checked) {
                        $('.' + this.value).show();
                    } else {
                        $('.' + this.value).hide();
                    }
            }


    $('.' + this.value).toggle();

});
});

我收到这个:https://jsfiddle.net/

但是代码运行不正确。如果您选择颜色后,形状或相反。你可以看到不正确的答案。 我的错误在哪里?

最佳答案

您需要考虑4种情况

1:未选择颜色和形状

2:选择颜色但未选择形状

3:选择形状但未选择颜色

4:都选择了

然后您可以显示全部并隐藏未选择的内容,或者隐藏全部并显示所有选择的内容,我正在使用第一种方式

  if($("#filterColor input:checked").length == 0 && $("#searchShape input:checked").length == 0){
        $('.color').show();
    }else if($("#filterColor input:checked").length == 0 && $("#searchShape input:checked").length > 0){
            $('.color').show();  
         $("#searchShape input:not(:checked)").each(function() {
                    $('.' + $(this).attr('value')).hide();
                    });
    }else if($("#filterColor input:checked").length > 0 && $("#searchShape input:checked").length == 0){
        $('.color').show();
      $("#filterColor input:not(:checked)").each(function() {
       //console.log(this,$(this).attr('value'),$('.'+$(this).attr('value')))
                    $('.' + $(this).attr('value')).hide();
                    });
    }else{
        $('.color').show();

       $("#searchShape input:not(:checked)").each(function() {
                    $('.' + $(this).attr('value')).hide();
                    });

         $("#filterColor input:not(:checked)").each(function() {
       //console.log(this,$(this).attr('value'),$('.'+$(this).attr('value')))
                    $('.' + $(this).attr('value')).hide();
                    });



    }

fiddle 在这里 https://jsfiddle.net/y2b3qebr/15/

关于javascript - <div>过滤器中的<div>过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42108722/

相关文章:

javascript - AJAX:如果没有更多结果,如何清除间隔

javascript - 在 $.ajax 成功后执行一个函数,而不是直接将其放入回调中

JavaScript 评估 - "SyntaxError: Unexpected token ILLEGAL"

jquery - CSS Sprite 图像加载速度极慢

javascript - 在 Razor 中将小数字段显示为 Int

jquery - 获取 div 的高度并将其应用于 div 内的元素

javascript - 如何从 JavaScript 中的回调函数返回变量?

javascript - AngularJS网页版工作移动文本区域无法编辑

jquery - f :browser is undefined and . fancybox 不是函数

javascript - 根据 url 中的哈希值显示元素