テキストでオプションを選択するには、どのセレクターが必要ですか?


207

<select>テキストが特定の値と等しいオプションがあるかどうかを確認する必要があります。

たとえば、がある場合<option value="123">abc</option>、「abc」を探します。

これを行うセレクターはありますか?

Imに似て$('#select option[value="123"]');いますが、テキストを探しています。


うーん... hasSLaksの答えは便利ですが、Floydsの答えのポイントも良いです...私は何を受け入れるかわかりません。
Hailwood、2009

また、これらは大文字と小文字を区別しますか?(大文字と小文字を区別せず、いつでも小文字に変換できる
Hailwood '19

1
大文字と小文字の区別が必要な場合は、JavaScriptコア関数.toLowerCase()を使用して比較します。また、質問に最も役立つものを回答として受け入れます。:)
Hari Pachuveetil 2010

複数選択APIを持つドロップダウンでは機能しませんか?私は運が悪いすべての可能な解決策を試しました。私はeric hyndのmultiselect dropdowm APIを使用しています。誰でもこの問題を解決できますか?
Chaitanya Chandurkar

回答:


320

これは役立つかもしれません:

$('#test').find('option[text="B"]').val();

デモフィドル

これは、Bテキストを含むオプションではなく、テキストを含むオプションを提供しますB。お役に立てれば

jQueryの最近のバージョンでは、上記は機能しません。以下のQuandaryによるコメントのとおり、これはjQuery 1.9.1で機能します。

$('#test option').filter(function () { return $(this).html() == "B"; }).val();

更新されたフィドル


1
これはjqueryの最新バージョンでは機能しません(<value>から 'value ='を削除した場合)
KevinDeus

27
@KevinDeus:なぜ反対票か!?答えは当時のjQueryのバージョンに対するものでした!
Hari Pachuveetil

11
代わりに、$( '#test option')。filter(function(){return $(this).html()== "B";})。val();を使用してください。
Stefan Steiger 2013年

84
@Quandaryそれでも、短いコメントで十分な場合に回答を反対票を投じるのは正当な理由ではありません。それとも、jQueryの新しいリリースごとに彼の答えをすべて再テストすることを期待していますか?
WynandB 2013年

2
反対票は、上の例では選択された値が検出されるだけで、選択された値が設定されないためであると思います。
nivs1978

133

:contains()セレクターを使用して、特定のテキストを含む要素を選択できます。
例えば:

$('#mySelect option:contains(abc)')

特定の<select>要素にそのようなオプションがあるかどうかを確認するには、次の.has()メソッドを使用します。

if (mySelect.has('option:contains(abc)').length)

その<select>ようなオプションを含むすべてのを見つけるには、:has()セレクターを使用します。

$('select:has(option:contains(abc))')

3
:contains今は決定的ではありませんね?
Hari Pachuveetil 2010

正確には何が問題なのですか?
Ogier Schelvis 2016年

選択したオプションのみでこれをどのように行いますか?
toddmo 2017

これもオプションをつかみません123abcdefか?
Teepeemm 2018年

@Teepeemmはい、それが2つのトップアンサーの違いです。上部のみのチェックは、特定のテキストのみを含むオプションを返します。これは、その特定のテキストだけでなく、それを含むオプションを返します。偶然にも、これは私が実際に現在必要としているものなので、私はそれを投稿してとても嬉しいです。
Lee A.

30

テキストボックスの値に基づいてリストの選択したインデックスを設定しようとしているため、以前の提案はjQuery 1.7.2では機能しませんでした。また、いくつかのテキスト値が複数のオプションに含まれています。私は以下を使用してしまいました:

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});

1
実際には正しい結果が返されるので、これが最良の答えだと思います。しかし、私は仕方がないのですが、contains完全に省略すると、実際にスピードアップするかもしれません。
スタイフル

これは私にとってはうまくいきましたが、私のシナリオではグリッドで編集を複数回クリックすることができたため、一致がない場合に選択した属性を削除する必要がありました。else {$(this).attr( 'selected'、 ''); falseを返します。}
esp

この解決策は私にとってはうまくいきましたが、オプション属性を設定する代わりに、実際に必要な選択メニューを変更しました:$(this).parent().val($(this).val()); おそらく両方を行うことができますが、私にとっては、親だけを設定することでうまくいきval()ました
ビリーノア2018年


15

これは私のために働きました: $("#test").find("option:contains('abc')");


3
それが機能する理由の説明も追加する必要があります。
Hannes Johansson

@HannesJohanssonまたは、少なくとも5年前のSLaksの回答とは異なる点、またはSLaksの回答に新しいものを追加する点を少なくとも説明する必要があります。; ^)
2016年

4
このオプションにもこのオプションが含まれることを忘れないでください:<option> abcd </ option>。
7

ありがとう、これは間違いなく正しく、誰もが見逃したのは.attr( 'value');を追加することです。最後まで。これは、動的に使用する値を実際に取得する最も簡単な方法です。したがって、完全なコードは次のようになります。 $("#testselect").find("option:contains('option-text')").attr('value'); そうすれば.click()、設定を変更するようなイベントを使用できます。
ChrisKsag 2018

12

これは、ドロップダウンリストでテキストを選択するための最良の方法です。

$("#dropdownid option:contains(your selected text)").attr('selected', true);

3
同様の答えと同様に、これはでオプションを見つけますthis is your selected text plus more
Teepeemm 2018年

4

FirefoxとIEの両方で動作するようになるまで、これらのことをいくつか試しました。これが私が思いついたものです。

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());

より読みやすい方法でそれを書く別の方法:

var valofText = $("#my-Select" + " option").filter(function() {
    return this.text == myText
}).val();
$(ElementID).val(valofText);

疑似コード:

$("#my-Select").val( getValOfText( myText ) );

jQueryの最新バージョンで意味を
なす

のポイントは"#my-Select" + " option"何ですか?なぜ"#my-Select option"ですか?
Teepeemm 2018年

3

以下を使用

$('#select option:contains(ABC)').val();

1
指定したコードで問題が解決する場合がありますが、これにより問題がどのように解決されるかについて簡単な説明を追加してください。Stack Overflowへようこそ。回答方法How to Answerをお勧めします。
Dan Beaulieu

3
いくつかのオプションがある場合:ABC、ABCD、ABCDEF、それから?
hungndv 2015年

1

これはjQuery 1.6(左角括弧の前のコロンに注意)で機能しますが、新しいリリース(現時点では1.10)では失敗します。

$('#mySelect option:[text=abc]")

5
興味深いですが、残念ながら機能しません(jQuery 1.10.2)。
WynandB 2013年

あなたのようなその何かを含めるしたいと思う$("#mySelect option").filter(function() { return this.text == "abc"; });のjQueryの最新バージョンとの意志の仕事..それとも、おそらくあなたが使用することを好む他の方法...
Fr0zenFyr

1

以下のjqueryバージョン1.10.2では私のために働きました

  var selectedText="YourMatchText";
    $('#YourDropdownId option').map(function () {
       if ($(this).text() == selectedText) return this;
      }).attr('selected', 'selected');
    });


0

これは私にとってはうまくいきます:

var result = $('#SubjectID option')
            .filter(function () 
             { return $(this).html() == "English"; }).val();

result変数がマッチしたテキスト値のインデックスを返します。次に、インデックスを使用して設定します。

$('#SubjectID').val(result);

-1

オプションを繰り返し処理するか、同じテキストをオプションの別の属性の中に入れて、それで選択します。


-1

これも機能します。

$( '#test')。find( "select option:contains( 'B')")。filter( ":selected");


2
これにより、オプションも取得されますABC
Teepeemm 2018年

-1

この回答で説明されているように、hasTextの独自のセレクターを簡単に作成できます。これにより、オプションを見つけることができます$('#test').find('option:hastText("B")').val();

追加したhasTextメソッドは次のとおりです。

 if( ! $.expr[':']['hasText'] ) {
     $.expr[':']['hasText'] = function( node, index, props ) {
       var retVal = false;
       // Verify single text child node with matching text
       if( node.nodeType == 1 && node.childNodes.length == 1 ) {
         var childNode = node.childNodes[0];
         retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3];
       }
       return retVal;
     };
  }

-2

これは私のために働く

var options = $(dropdown).find('option');
var targetOption = $(options).filter(
function () { return $(this).html() == value; });

console.log($(targetOption).val());

すべての投稿をありがとう。

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