2011-11-14 4 views
3

<select>タグと<option>タグを持つhtmlがあります。私は、このように特定のオプション/値を取得:jQuery <option>要素を取得しようとすると、未定義のエラー

$(targetElement).children("option[text=" + Text + "]").val(); 

targetElementは私<select>要素であり、Textは私が検索したいオプションのテキストです。

selecton jsFiddle)内に複数の選択肢があるとき、これは正常に動作しますが、唯一の1つのオプションがある場合、私は(on jsFiddleundefinedを入手!

オプションが1つしかないときに、なぜ動作しないのか、誰に教えてもらえますか?

+1

サンプル入力とテキストの値を入力できますか?含まれている – Dogbert

答えて

2

はこれを試してみてください:

$(function(){ 
    var lastOptionValue = $('select > option:last').val(); 
    alert(lastOptionValue); 
}); 

あなたはhereを試すことができます。

EDIT: 申し訳ありませんが、私はunattentiveだった...

これはあなたのcorrect exampleです:

$(function(){ 
    text = 'Foo'; 
    var $last = $('select>option').filter(function(){ 
    return $(this).text() == text; 
    }).last(); 
    if ($last.length > 0){ 
    alert($last.val()); 
    } 
}); 

あなたはfilter()匿名関数でより多くの機能を追加することができます。たとえば、RegExpなど必要なものがあります。

2

[name=value]構文は、要素の属性をチェックするためのものです。たとえば、FooInAttributeは一致させますが、FooInContentsは一致させません。両方のシナリオで

<option value="42" text="FooInAttribute">FooInContents</option> 

<option>タグ利用可能な複数存在するとき、それは動作しますなぜ私はあなたを伝えることはできませんが、:contains作品。代わりにこれを試してみてくださいが、InviSノートでは、これはリストのどのオプションも他のもののフルテキストを含んでいないと仮定しています(つまり、 'Burger'というオプションがある場合、別の 'Burger and Fries'を持ってはいけません):

それはテキストだと

var txt = "Bar"; 
var x = $('select').children().filter(function() { 
    return $(this).text() == txt; 
}).val(); 
console.log(x); 

これは「バー」で一つの値を返します。

$(targetElement).children("option:contains('" + text + "')").val(); 
+0

が正しくないと思います。彼は余分なオプションを得ることができます。たとえば、テキストが 'SomeFooSome'または' ... Foo ... 'であり、彼がFooだけを探します。 – ValeriiVasin

+0

それは良い点です。このソリューションでは、リスト内のオプションが一意であり、それらの中には別のもののフルテキストが含まれていないものと想定しています。 –

+0

私はこの答えに同意します。シンプルですが、機能します。 :)より複雑な比較の著者は私の例を使用することができます:)両方の答えがうまくいきます。主なエラーは、jQuery構文の誤った使用です。 – ValeriiVasin

2

また.filter()方法を利用することができます。

+0

良い点:)私のために休憩をする時間です:D私は自分の投稿を編集しました:) – ValeriiVasin

関連する問題