jQuery-テキストの説明を介して選択コントロールの選択された値を設定する


530

選択コントロールがあり、JavaScript変数にテキスト文字列があります。

jQueryを使用して、selectコントロールの選択された要素を、(私が持っていない値ではなく)私が持っているテキストの説明を持つ項目に設定したいと思います。

値で設定するのはかなり簡単です。例えば

$("#my-select").val(myVal);

しかし、私はテキストの説明を介してそれを行うことに少し困惑しています。テキストの説明から価値を引き出す方法があるに違いないと思いますが、私の脳は金曜日の午後になっていてそれを解決することができません。


1
@DanAtkinsonも同じことを自分でやろうとしていました。selectはこの質問とはまったく関係ありません。
thecoshman 2014年

回答:


757

jQuery v1.6以降の説明で選択

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

1.6未満で1.4以上のjQueryバージョン

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

このアプローチは1.6以上1.9未満のバージョンでも機能しますが、1.6以降は非推奨となっていることに注意してください。それは動作しません 1.9+ jQueryのでは。


以前のバージョン

val() 両方のケースを処理する必要があります。

$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>


6
これは動作しないように感じます(あいまいである可能性があります)が、実際には問題なく動作するはずです。ありがとう。
DanSingerman 2009年

69
jQuery 1.4では、この動作が変更valueされ、属性が指定されている場合は選択するようになり、value属性がない場合はテキストでのみ選択されることに注意してください。したがって、この例で$('select').val('Two')は1.3.xでは2番目のオプションが選択されますが、1.4.xでは何も行われません。
クレセントフレッシュ

18
それで、今1.4でそれを行うための最良の方法は何ですか?
JRローホーン2010

4
jQueryの最近のバージョンでは、.val( 'not-an-option-value')は選択を最初のオプションにリセットします。
ランド:

5
この質問への最初の答えは、ソリューションポストの1.3.xのように見えるstackoverflow.com/questions/3644449/...
DA。

142

私はこれをテストしていませんが、これはあなたのために働くかもしれません。

$("select#my-select option")
   .each(function() { this.selected = (this.text == myVal); });

90

これを試してください... myTextというテキストでオプションを選択します

$("#my-Select option[text=" + myText +"]").prop("selected", true);

@spoulsonの答えは私のために働きました...私は.eachなしでそれをやろうとしました
ジェイ・コーベット

2
多くの場合、このアプローチは残念ながら機能しません。私$("#my-Select option[text=" + myText +"]").get(0).selected = true;は時々クラシックなスタイルに
固執しなければなりませんでした

2
再設定する前に、まず選択した属性を削除していることを確認してください。そうしないと、機能しないように見えます(1.9では私にとって機能します)
esse

3
@MarkW 1.9では、の.prop代わりに使用し.attrます。変更の原因は、1.9ではjQueryが.attrDOMプロパティおよびHTML属性の変更に使用できる古いハックを無効にしたことです。(javascript dom properties vs attributes区別がわからない場合はGoogle 。)
Mark Amery 2013

jQuery 1.9以上の互換性の.prop('selected', true)代わりに使用するように回答を更新しました.attr('selected', 'selected')
erwaman

43

私はこのようにしています(jQuery 1.9.1)

$("#my-select").val("Dutch").change();

注:change()を忘れないでください。そのため、私は長い間検索する必要がありました:)


2
私は複数回賛成できることを望みます。やめた時間の1時間後、家に帰ることができます。
ボブジョーダン

正解です。短くてシンプル...これが一番です...投票を続けてください。
ムハンマドタリック

これは私の場合うまくいきました、ありがとう!しかし、これは、OPが要求したように、表示されたテキストではなく、OPにない値自体によって選択するのではないでしょうか。
ブランドンロードス

21
$("#myselect option:contains('YourTextHere')").val();

テキストの説明を含む最初のオプションの値を返します。これをテストして動作します。


ありがとう-一致するテキストがない場合のロジックも必要なので、これが私のバージョンである可能性があると思います。これを行うには、これが最も簡単なメカニズムのようです。
DanSingerman 2009年

1
覚えておいてください、それはテキストと一致する最初のオプションの値のみを取得します。
Russ Cam

さらに、val()の代わりにラップされたセットにattr( "selected"、 "selected")をチェーンすることもできます。これはCarolinaJay65の回答と同様に機能します
Russ Cam

1
OPは言った、「設定値」ではない取得値を」
RousseauAlexandre

15

すべてのjQueryバージョンの複雑化を避けるために、これらの本当に単純なJavaScript関数の1つを使用することを正直にお勧めします...

function setSelectByValue(eID,val)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].value==val) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

function setSelectByText(eID,text)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].text==text) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

呼び出された関数に応じて、値またはテキストを介して選択オプションを選択できます。例:setSelectByValue( 'sausages'、 '2'); idが「sausages」の選択オブジェクトで、値が「2」のオプションを見つけて選択します。
デイブ

2
@ニールええと...それは質問に答えますか?
Mark Amery 2013年

10

私はこれが古い投稿であることを知っていますが、jQuery 1.10.3と上記のソリューションを使用してテキストで選択することはできませんでした。私は次のコード(spoulsonのソリューションのバリエーション)を使用してしまいました。

      var textToSelect = "Hello World";

      $("#myDropDown option").each(function (a, b) {
            if ($(this).html() == textToSelect ) $(this).attr("selected", "selected");
        });

それが誰かを助けることを願っています。



7
 $("#Test").find("option:contains('two')").each(function(){
     if( $(this).text() == 'two' ) {
        $(this).attr("selected","selected");
     }
 });

ifステートメントは "two"および "two three"と完全に一致しません。


いいえ、それは私が意図したものではありません。私のコメントは少し不明確だったので、削除しました。私の状況ではうまくいったので、私はあなたの答えに賛成票を投じました。
Jagd

6

1.7以降で最も簡単な方法は次のとおりです。

$("#myDropDown option:text=" + myText +"").attr("selected", "selected"); 

1.9以上

$("#myDropDown option:text=" + myText +"").prop("selected", "selected"); 

テストされ、動作します。


1
1.9以降ではサポートされていません。1.6以降では.prop、DOMプロパティを変更するために使用する必要があります.attr(HTML / DOM属性用です)。stackoverflow.com/q/5874652/1709587を
Mark Amery 2013

私は「selected」の真の値の代わりに(「selected」、true)を使用します
mplungjan


4

jquery selectedboxプラグインを見てください

selectOptions(value[, clear]): 

パラメータとして文字列$("#myselect2").selectOptions("Value 1");または正規表現を使用して、値でオプションを選択します$("#myselect2").selectOptions(/^val/i);

すでに選択されているオプションをクリアすることもできます: $("#myselect2").selectOptions("Value 2", true);


3

余談です。選択した値が設定されていませんでした。そして、ネット全体を検索しました。実際、Webサービスからデータを取得していたため、Webサービスからのコールバック後に値を選択する必要がありました。

$("#SelectMonth option[value=" + DataFromWebService + "]").attr('selected', 'selected'); 
$("#SelectMonth").selectmenu('refresh', true);

したがって、セレクターの更新だけが欠けていたものでした。


これは正しい質問ですが、2行目に理由はありません。そのまま動作するはずです。
Sagive SEO、2015

2

私はattrあなたを使用すると、あなたがしたくないときに複数のオプションが選択されてしまうことに気づきました-解決策は次のものを使用することpropです:

$("#myDropDown option:text=" + myText +"").prop("selected", "selected");


1

上記の例に問題がありました。問題は、選択ボックスの値に6文字の固定長文字列が事前に入力されているが、渡されるパラメーターが固定長ではなかったことが原因です。

文字列を指定された長さに、指定された文字で右パディングするrpad関数があります。そのため、パラメーターをパディングした後、機能します。

$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));


function rpad(pStr, pLen, pPadStr) {
if (pPadStr == '') {pPadStr == ' '};
while (pStr.length < pLen)
    pStr = pStr + pPadStr;
return pStr; 
} 

1
 $('#theYear').on('change', function () {
 FY = $(this).find('option:selected').text();
 $('#theFolders').each(function () {
     $('option:not(:contains(' + FY + '))', this).hide();
 });
 $('#theFolders').val(0);
});

$('#theYear').on('mousedown', function () {
 $('#theFolders option').show().find('option:contains("Select")', this).attr('selected', 'selected');
});

0

この受け入れられた答えは正しくないようですが、.val( 'newValue')は関数に対して正しいので、名前で選択を取得しようとしても機能しません。要素を取得するためにIDとクラス名を使用する必要がありました。


0

簡単なオプションがあります。リストオプションを設定し、そのテキストを選択した値として設定するだけです。

$("#ddlScheduleFrequency option").selected(text("Select One..."));

-1

選択ボックスの子を取得します。それらをループします。必要なものが見つかったら、それを選択オプションとして設定します。ループを停止するにはfalseを返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.