2012-05-05 115 views
2

我試圖設置一組選擇框來快速過濾相當大的數據集成可用的塊。而且我非常接近,但接收到與我想要的解決方案完全相反的內容,無論是否使用.not()選擇器(或將其取出),或者使用.attr =(或.attr!= )。jquery:刪除基於屬性數組和其他選擇框選擇的選擇選項

這裏有一個小提琴,所以你可以看到發生了什麼事情。

http://jsfiddle.net/yD5cG/3/ (忽視的事實是,一旦你改變了頂級的選擇,底部選擇框不會改變我不需要擔心這一點)。

我已經拖網站,發現了很多代碼接近我需要的,但我認爲解析數組會拋出它?在這一點上,我不知道我是過於複雜的事情還是過度簡化。 (這基本上是一個嘗試使用JQuery的簡單多對多過濾器)。

感謝任何東西,甚至連最基本的想法...

+0

所有這些無效屬性不需要;見下面的答案。 – iambriansreed

+1

謝謝@iambriansreed!這是如此簡單和優雅 - 想想,所有這些無效的屬性花了我4小時(幾乎)弄清楚!唯一的問題是在我的原始標記中,您會看到selectbox2中的一個選項也包含兩個值。這就是我創造屬性的原因;我不認爲我可以用選項值做到這一點。去看看我是否可以使用你的代碼作爲跳板來完成這項工作。 – dilettante

+0

經過更新,可使用*多個*值的選項。小提琴更新。記得投票並接受。 :) – iambriansreed

回答

2

證明: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 
});​ 

一個工作小提琴,一步解釋了一步。另一個質量答案。

相關問題