【问题标题】:jquery: remove select options based on attribute array & other select box selectionjquery:删除基于属性数组和其他选择框选择的选择选项
【发布时间】:2012-05-14 12:52:53
【问题描述】:

我正在尝试设置一组选择框,以快速将相当大的数据集过滤成可用的块。而且我非常接近,但收到的解决方案与我想要的完全相反,无论我是否使用 .not() 选择器(或将其取出),还是使用 .attr= (或 .attr!= )。

这是一个小提琴,所以你可以看到发生了什么:

http://jsfiddle.net/yD5cG/3/ (忽略一个事实,一旦你改变了顶级选择,底部选择框就不会改变。我不需要担心这个)。

我浏览了该站点,发现很多代码与我需要的代码很接近,但我认为解析数组是不是就把它扔掉了?在这一点上,我无法判断我是否过于复杂或过于简单。 (这基本上是尝试使用 JQuery 进行简单的多对多过滤)。

感谢任何事情,即使是最基本的想法...

【问题讨论】:

  • 不需要所有那些无效的属性;请参阅下面的答案。
  • 谢谢@iambriansreed!这是如此简单和优雅——想想,所有这些无效属性花了我 4 个小时(几乎)弄清楚!唯一的问题是在我的原始标记中,您会看到 selectbox2 中的选项之一也包含两个值。这就是我创建属性的原因;我不认为我可以用选项值来做到这一点。去看看我是否可以使用你的代码作为跳板来完成这项工作。
  • 已更新以使用具有 多个 值的选项。小提琴更新。记得投票并接受。 :)
  • 效果很好,我完全理解。感谢您提供清晰的代码。

标签: jquery jquery-selectors attributes jquery-selectbox


【解决方案1】:

证明:http://jsfiddle.net/iambriansreed/KBKEV/

var options = $('#selectbox2').html();
//store original options
$("#selectbox1").change(function() {
    var selected = this.value.split(',');
    // get selected value and make it an array
    $('#selectbox2').html(options);
    // reset the box to the original options
    $('#selectbox2 option').filter(function(){
        if(this.value.indexOf(',') == -1){
            // simple single values
            return $.inArray(this.value, selected) == -1;
        }else{  
            // check each value
            var values = this.value.split(',');
            for(i in values){
                if($.inArray(values[i], selected) > -1)
                    return false;            
            }
            return true;  
        }  
    }).remove();    
    // remove any options not in the array of selected values
});​

一个工作小提琴和一步一步的解释。另一个高质量的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多