2009-08-21 32 views
40

I持って、次のHTMLjQueryの選択リスト上で選択した属性を設定

<select id="dropdown"> 
    <option>A</option> 
    <option>B</option> 
    <option>C</option> 
</select> 

私はそれが可能になるので、それを選択しattrributeを設定したいので、私は、文字列「B」を持っている:

<select id="dropdown"> 
    <option>A</option> 
    <option selected="selected">B</option> 
    <option>C</option> 
</select> 

JQueryでこれをどのように行うのですか?

答えて

105

...の線に沿って何か、あなたが大幅に必要なコードを減らすことができます

<option value="B">B</option> 
012に

<option>B</option> 

:この操作を行いますあなたはの使用を含めることないを決定した場合は

$("select option[value='B']").attr("selected","selected"); 

:変更を行います、jQueryのに従うものと

<option value="IL">Illinois</option> 

:あなたのような何かをしたいとき

これが参考になりますvalue属性を使用する場合は、各オプションを順番に確認し、その値を手動で確認する必要があります。

$("select option").each(function(){ 
    if ($(this).text() == "B") 
    $(this).attr("selected","selected"); 
}); 
+14

'value'属性を追加した後、次のように選択することもできます:' $( "dropdown")val( "B"); ' –

+0

+1 - これはまさに私が探していたものです。また、+1 @jorn – Jason

+0

こんにちは* @ジョナサン・サンプソン*:良い解決策。他のすべてのものは.val()を設定することをお勧めしますが、それは私のためにはうまくいかないようです。 – MikeSchinkel

1

純粋なDOMを使用できます。 http://www.w3schools.com/htmldom/prop_select_selectedindex.asp

document.getElementById('dropdown').selectedIndex = 1; 

を参照してくださいが、jQueryのは助けることができます。

$('#dropdown').selectedIndex = 1; 
+4

することができます。これは、リストが動的に生成される場合に必ずしも当てはまるわけではありません。 – tvanfosson

2

私はそのオプションで選択した属性を設定し、その後、私は選択したいものにテキストを比較し、オプションを反復処理したいです。正しいものを見つけたら、反復を終了します(複数選択がない限り)。

$('#dropdown').find('option').each(function() { 
     var $this = $(this); 
     if ($this.text() == 'B') { 
     $this.attr('selected','selected'); 
     return false; 
     } 
}); 
+0

$( '#ドロップダウンオプション')ではなく.find()を使用する理由はありますか?もっと効率的? "var $ this"のものも私に間違って見える... –

+1

私は違いが主に文体だと思う。フードの下で私は彼らが基本的に同じ方法で動作すると期待します。コレクションを取得し、それをフィルタリングします。私は$ thisをjQueryオブジェクトへの参照を保持する方法として使い始めました。私も自己(または$自己)を見たことがありますが、それはあまり明確ではないと思います。 – tvanfosson

0

あなたはオプションのvalue属性を含めるには少しあなたのHTMLを変更する気にしない場合は

$('select option:nth(1)').attr("selected","selected"); 
1

コード:

var select = function(dropdown, selectedValue) { 
    var options = $(dropdown).find("option"); 
    var matches = $.grep(options, 
     function(n) { return $(n).text() == selectedValue; }); 
    $(matches).attr("selected", "selected"); 
}; 

例:

select("#dropdown", "B"); 
10
<select id="cars"> 
<option value='volvo'>volvo</option> 
<option value='bmw'>bmw</option> 
<option value='fiat'>fiat</option> 
</select> 

var make = "fiat"; 

$("#cars option[value='" + make + "']").attr("selected","selected"); 
2

あなたはdanielrmtの.selectedIndex戦略に従いますが、このようなオプションタグ内のテキストに基づいてインデックスを決定することができます

$('#dropdown')[0].selectedIndex = $('#dropdown option').toArray().map(jQuery.text).indexOf('B'); 

これは、値属性を使用せずに元のHTMLで機能します。

1
$('#select_id option:eq(0)').prop('selected', 'selected'); 

その良い

4

あなたが使用する必要が1.6以来、jQueryのを使用している場合。()メソッドを支える:

$('select option:nth(1)').prop("selected","selected"); 
1

は、これはこれは、あなたが希望する値を持つ要素を知っていることを前提とソリューション

$(document).on('change', 'select', function() { 
      var value = $(this).val(); 
      $(this).find('option[value="' + value + '"]').attr("selected", "selected"); 
     }) 
関連する問題