11

リストから生成されたドロップダウン セレクターがあり、重複するエントリを削除するためにオプションをフィルター処理したいと考えています。たとえば、フィルタリングしたい...

<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>

...ダウンして、ユーザーに次のようなものを提示します...

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

(データは別のリストの SharePoint ルックアップから取得されます。jquery を使用して、何が起こっているのかを理解することなく、固有のオプションのみを保持できると考えています。) このようなオプションを削除できますか? ありがとう。

4

3 に答える 3

32

単純なループでそれを行うことができます-しかし、私が見ていないjQueryセレクターでこれを処理する賢い方法があるかもしれません。以下が機能するはずです。

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

編集:これは、優れたUnderscore.jsの助けを借りてそれを行う機能的なスタイルのワンライナーですが、以前のバージョンの方がほぼ確実に効率的です:

_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); });
于 2009-12-09T19:08:59.847 に答える
6

次のようなことができます。

var previousOption;
$('select[name=company] option').each(function() {
    if (this.text == previousOption) $(this).remove();
    previousOption= this.text;
});
于 2009-12-09T19:07:51.300 に答える
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();
}); 
于 2010-07-15T10:56:47.817 に答える