首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于三个下拉菜单的值的Jquery选择器

基于三个下拉菜单的值的Jquery选择器
EN

Stack Overflow用户
提问于 2011-09-23 02:32:25
回答 2查看 332关注 0票数 2

我正在处理三个下拉菜单,每个下拉菜单都有三个选项。这三个下拉菜单一起创建了一个系统,它可以处于二十七个状态中的任何一个状态。对于每个下拉列表,都有选项1、选项2和全部(选项1和选项2的并集)。

根据这三个下拉菜单所处的状态,我希望显示或隐藏不同的div。这些div具有class="distribution-(select-1)-(select-2)-(select-3)"形式的类

我正在试图找到一种干式的方法来编写代码,而不是依赖于27个不同的条件。

以下是下拉菜单:

代码语言:javascript
复制
<div  style = "margin-top:1cm; font-size:125%">
    <strong>Clickout Type&nbsp;</strong>
    <select class = "clickouts" >
        <option value = "all" selected="selected">All</option>
        <option value = "clickouts" >Clickouts</option>
        <option value = "preferred" >Preferred Clickouts</option>
    </select>
    <strong>Graph Type&nbsp;</strong>
    <select class = "graph-type" >
        <option value = "all" selected="selected">All</option>
        <option value = "hist" >Histograms</option>
        <option value = "percent" >Percent</option>
    </select>
    <strong>Roll-up Type&nbsp;</strong>
    <select class = "roll-up" >
        <option value = "all" selected="selected">All</option>
        <option value = "aggregate" >Aggregate</option>
        <option value = "granular" >Granular</option>
    </select>
</div>

下面是一些div类的示例:distribution-hist-clickouts-aggregate, distribution-percent-clickouts-aggregate, class="distribution-hist-clickouts-granular", distribution-percent-clickouts-granular

下面是前七个州的jquery:

代码语言:javascript
复制
$('.clickouts, .graph-type, .roll-up').change(function(){
    var graph_type = $('.graph-type').val(); 
    var roll_up = $('.roll-up').val();
    var clickouts = $('.clickouts').val(); 

    if (graph_type == 'all' & roll_up == 'all' & clickouts == 'all'){
        $('div[class*="distribution"]').css('display', 'block');
    }
    if (graph_type == 'all' & roll_up == 'all' & clickouts == 'clickouts'){
        $('div[class*="clickout"]').css('display', 'block');
        $('div[class*="preferred"]').css('display', 'none');
    }

    else if (graph_type == 'all' & roll_up == 'all' & clickouts == 'preferred'){
        $('div[class*="clickout"]').css('display', 'none');
        $('div[class*="preferred"]').css('display', 'block');
    }

    else if (graph_type == 'hist' & roll_up == 'all' & clickouts == 'all'){
        $('div[class*="hist"]').css('display', 'block');
        $('div[class*="percent"]').css('display', 'none');
    }

    else if (graph_type == 'percent' & roll_up == 'all' & clickouts == 'all'){
        $('div[class*="hist"]').css('display', 'none');
        $('div[class*="percent"]').css('display', 'block');
    }

    else if (graph_type == 'all' & roll_up == 'aggregate' & clickouts == 'all'){
        $('div[class*="aggregate"]').css('display', 'block');
        $('div[class*="granular"]').css('display', 'none');
    }

    else if (graph_type == 'all' & roll_up == 'granular' & clickouts == 'all'){
        $('div[class*="aggregate"]').css('display', 'none');
        $('div[class*="granular"]').css('display', 'block');
    }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-23 02:48:57

如果要将复杂的类class="distribution-(select-1)-(select-2)-(select-3)更改为一组类class="distribution (select-1) (select-2) (select-3),则可以使用以下脚本:

代码语言:javascript
复制
$('.clickouts, .graph-type, .roll-up').change(function(){
    var graph_type = $('.graph-type').val(); 
    var roll_up = $('.roll-up').val();
    var clickouts = $('.clickouts').val(); 

    graph_type = (graph_type == "all" ? "" : "." + graph_type);
    roll_up = (roll_up == "all" ? "" : "." + roll_up);
    clickouts = (clickouts == "all" ? "" : "." + clickouts);

    var selector = '#container div' + graph_type + roll_up + clickouts;

    $('#container div:visible').hide();
    $(selector).show();
});

代码:http://jsfiddle.net/9R5zj/9/

票数 2
EN

Stack Overflow用户

发布于 2011-09-23 02:55:54

好的,有几件事可以帮助你重构它。

您应该记住的一件简单的事情是元素可以有多个类。这意味着,您可以为distribution-hist-clickouts-aggregate类提供四个类,而不是使用带有div的div,如下所示:

代码语言:javascript
复制
<div class="distribution hist clickouts aggregate"></div>

此外,不是将选择选项的value设置为all,而是将选择器放入以下值中,从而使程序更容易理解:

代码语言:javascript
复制
<option value = ".aggregate, .granular" selected="selected">All</option>    
<option value = ".aggregate" >Aggregate</option>    
<option value = ".granular" >Granular</option>    

我不确定我是否完全理解所有if语句背后的逻辑,但您可以这样做:

代码语言:javascript
复制
$("div.distribution").hide();
$(graph_type).show();
$(roll_up).show();
$(clickouts).show();

你可以在this demo上看到我的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7519678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档