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

标签 javascript jquery html jquery-selectors css-selectors

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

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

我正在尝试找到一种不依赖 27 个不同条件的 DRY 编码方式。

以下是下拉菜单:

<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-grinar"、distribution-percent-clickouts-grinar

这是前七个状态的 jquery:

$('.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');
    }
});

最佳答案

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

$('.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/

关于javascript - 基于三个下拉菜单值的 Jquery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7519678/

相关文章:

像 ruby​​ 一样的 Javascript 字符串插值

html - CSS Grid - 当元素太大时使类似表格的网格溢出

html - 高级 CSS 动画

css - 两个 DIV 彼此相邻。第一个文本,第二个图像。图像可变宽度。文本填充第一个 DIV 中的剩余空间?

javascript - 将多个球放入盒子中 (javascript)

javascript - 如何从 JSON 中的 Ajax 响应中获取对象信息

javascript - 将正则表达式应用于 javascript 中的 uri 变量

javascript - 尝试在 Fancybox 回调中调用 CoffeeScript 方法时出现范围问题

javascript - 移动设备上的响应式菜单在滚动时消失了?

jquery - 页面加载后检索和更新 CSS 值