2012-05-05 25 views
2

かなり大きなデータセットを使用可能な塊にすばやくフィルタリングするための選択ボックスのセットを設定しようとしています。私は非常に近いですが、.not()セレクタを使用するかどうかにかかわらず、私が望むソリューションの正反対のものを受け取ったり、.attr =(または.attr!= )。jquery:属性配列と他の選択ボックスの選択に基づいて選択オプションを削除する

http://jsfiddle.net/yD5cG/3/ (私はする必要はありませんあなたはトップレベルの選択を変更すると、下の選択ボックスが変化しないという事実を無視します:あなたは何が起こっているのを見ることができるようにここで

はフィドルですこれについて心配してください)。

私はサイトを徘徊して、必要なものに近いコードをたくさん見つけましたが、解析する配列はそれを捨てていると思いますか?この時点で、私は、私が過度に複雑化しているのか、過度に単純化しているのかを知ることはできません。 (これは基本的に、JQueryを使用する単純な多対多フィルタの試みです)。何のための

おかげで、最も基本的な考え方...

+0

これらのすべての無効な属性は必要ありません。以下の回答を参照してください。 – iambriansreed

+1

ありがとう@iambriansreed!これはとてもシンプルでエレガントなものだと思います。それらの無効な属性はすべて私が(ほぼ)把握するまでに4時間かかりました!唯一の問題は私の元のマークアップであり、selectbox2のオプションの1つにも2つの値が含まれていることがわかります。これが属性を作成する理由です。私はオプションの値でそれをすることができないと思った。この作業を進めるための踏み台としてコードを使用できるかどうかを確認します。 – dilettante

+0

* multiple *値のオプションを使用するように更新されました。フィドルが更新されました。投票して受け入れてください。 :) – 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 
});​ 

作業フィドルとステップの説明によってステップ。もう一つの質の高い答え。

関連する問題