【问题标题】:jQuery and multiple "category" selectorjQuery 和多个“类别”选择器
【发布时间】:2013-03-18 15:25:51
【问题描述】:

html:

<ul id="selector">
    <li><a href="#" class="group1" rel="group1">group 1</a></li>
    <li><a href="#" class="group2" rel="group2">group 2</a></li>
    <li><a href="#" class="group3" rel="group3">group 3</a></li>    
</ul>
<ul id="elements">
    <li class="group1">1</li>
    <li class="group1 group2">1 and 2</li>
    <li class="group3">3</li>
    <li class="group1 group3">1 and 3</li>
    <li class="group2 group3">2 and 3</li>
    <li class="group2">2</li>
</ul>

jQuery:

$('#selector a').click(function(event){
    event.preventDefault();
    var $this = $(this),
        target = $this.attr('rel');
    $('#selector a').removeClass('active');
    $this.addClass('active');
    $('#elements li').addClass('inactive');
    $('#elements li.'+target).removeClass('inactive').addClass('active');
});

css:

#selector {margin: 10px 0; background: #eee; list-style: none; padding: 0px;}
#selector li {display: inline-block;}
#selector li a {display: block; margin: 0 4px; padding: 5px; background: #aaa;}
#selector li a.active {color: #fff;}

#elements {margin: 0px; padding: 0px; list-style: none; background: #eee;}
#elements li {display: inline-block; width: 100px; margin: 4px; text-align: center; background: #ccc; padding: 40px 0;}
#elements li.inactive {opacity: 0.2}

这段简单的代码显示了一个小界面,允许用户单击组选择器元素并突出显示属于该组的所有元素。单击其他组按钮时,选择会更改。 我想从这一点出发,能够使多个组选择器“活动”,同时突出显示属于单击的这两个、三个或更多选择器元素的所有元素。

换句话说 - 有人点击 group1 选择器 - 具有该类的元素被突出显示。比有人点击 group2 - 并且只有属于这两个组的元素被突出显示。当有人“取消点击”group1 选择器时,只有具有 class2 的元素会被突出显示,等等。当没有点击任何组选择器时 - 所有元素都具有 100% 的不透明度。

谁能告诉我从哪里开始以及我应该如何从上面的代码开始?

http://jsfiddle.net/Cyberek/MeG6S/ 了解它现在如何工作的示例。

【问题讨论】:

    标签: javascript jquery html css user-interface


    【解决方案1】:

    这是一种方法,将所有内容包装在一个容器中并将类添加到该容器中,使用它来设置相关项目的样式。我们可以简单地切换被点击的类,而不是所有这些类操作。

    jsFiddle

    JS

    $('#selector a').click(function(event){
        event.preventDefault();
        var group = this.className;
        $('#container').toggleClass(group);
    });
    

    CSS

    #container #elements li {opacity: 0.2}
    #container.group1 #elements .group1,
    #container.group2 #elements .group2,
    #container.group3 #elements .group3 {opacity:1;}
    
    #container.group1 #selector .group1,
    #container.group2 #selector .group2,
    #container.group3 #selector .group3{border:1px solid #000;}
    

    扩展

    如果您只想在 1 和 2 都处于活动状态时激活“1 和 2”,那么您可以像这样扩展它以覆盖所有基础。如果您有 5 个以上的组,则 JavaScript 替代方案可能会更好。

    jsFiddle

    #container.group1 #elements .group1:not(.group2):not(.group3),
    #container.group2 #elements .group2:not(.group1):not(.group3),
    #container.group3 #elements .group3:not(.group1):not(.group2),
    #container.group1.group2:not(.group3) #elements .group1.group2:not(.group3),
    #container.group2.group3:not(.group1) #elements .group2.group3:not(.group1),
    #container.group3.group1:not(.group2) #elements .group3.group1:not(.group2),
    #container.group1.group2.group3 #elements .group1,
    #container.group1.group2.group3 #elements .group2,
    #container.group1.group2.group3 #elements .group3,
    #container:not(.group1):not(.group2):not(.group3) #elements li {opacity:1;}
    

    【讨论】:

    • 我认为这比这要复杂一些。我不认为1 and 2 或1 and 3 应该是active 当only group1 被选中,等等
    • 1 和 2 应在仅选择 1 时处于活动状态。它是正确的。该死的,谢谢你泰里亚尔。前几天一直在想怎么做,现在看答案就很明显了:)。再次感谢。
    • 最后一件事是 - 当没有选择选择器按钮时,是否有一种简单的方法可以使所有元素不透明:1?
    • #container:not(group1):not(.group2):not(.group3) #elements li CSS 很神奇 ;)
    • 我看不出这怎么能正常工作?例如,如果您单击2 和3,则1 and 3 将被赋予活动类,即使1 尚未被选中。我的理解是,它必须拥有 所有 选定的类才能获得 active 类,还是我错了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2011-03-30
    • 2012-07-29
    • 2011-07-26
    • 2012-01-30
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多