2009-12-09 46 views
11

リストから生成されたドロップダウンセレクタがあり、重複したエントリを削除するオプションをフィルタしたい。例えば私は...何かのようにユーザに提示するためにダウン... ...選択したドロップダウンから重複したオプションをフィルタリングする

<select name="company"> 
    <option "1">Microsoft</option> 
    <option "5">Apple</option> 
    <option "7">Google</option> 
</select> 

<select name="company"> 
    <option "1">Microsoft</option> 
    <option "2">Microsoft</option> 
    <option "3">Microsoft</option> 
    <option "4">Microsoft</option> 
    <option "5">Apple</option> 
    <option "6">Apple</option> 
    <option "7">Google</option> 
</select> 

をフィルタリングする(データは別のリストにSharepointの検索から来ていると私は思い私はjqueryを使って、何が起こっているのかを知ることなく、ユニークなオプションだけを保つことができると思っています。)このようなオプションを削除することはできますか?ありがとう。

答えて

31

あなたは単純なループでそれを行うことができます - しかし、私は見ていないよjQueryのセレクタでこれを処理するための賢い方法があるかもしれません。以下の作業をする必要があります:

var usedNames = {}; 
$("select[name='company'] > option").each(function() { 
    if(usedNames[this.text]) { 
     $(this).remove(); 
    } else { 
     usedNames[this.text] = this.value; 
    } 
}); 

編集:

_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); }); 
:以前のバージョンではほぼ確実に、より効率的であるが、ここで
は、優れた Underscore.jsの助けを借りて、それをしない機能的なスタイルのワンライナーだが
+0

ありがとうございます。これは私が探していたものですが、私はJS構文に縛られていました。 – afewscoops

6

あなたはこのような何かを行うことができます。

var previousOption; 
$('select[name=company] option').each(function() { 
    if (this.text == previousOption) $(this).remove(); 
    previousOption= this.text; 
}); 
+0

この場合、text()ではなくval()を使用するとします。 – Ryan

+2

3つのノート: 1. val()ではなくtext()を使いたいと思う。値が異なるように見えるからです。 2.重複した値(Microsoft、Apple、Microsoftなど)が交互に現れるケースはありませんが、元の問題かどうかはわかりません。 3.関数の始めに$(this)を1回だけ呼び出すことをお勧めします(つまり、 'var option = $(this))')。 –

+0

良い考えに感謝します。しかし、val()はこの場合正しい値を返してくれました。私はテキストが良いだろうと同意する。 –

5

次のコードを試すと、位置に関係なく重複が削除されます。ここで#targetSelectがあなたの目標ですドロップダウン

var a = new Array(); 
$(#targetSelect).children("option").each(function(x){ 
test = false; 
b = a[x] = $(this).text(); 
for (i=0;i<a.length-1;i++){ 
if (b ==a[i]) test =true; 
} 
if (test) $(this).remove(); 
}); 
関連する問題