2011-07-01 4 views
1

は:jQuery each()を使用して選択リストの各項目(オプション)を変更できますか?この選択リストを考えると

<select id="my_list"> 
    <option value="one">One</option> 
    <option value="two">Two</option> 
    <option value="three">Three</option> 
</select> 

私は、オプションの各項目を反復処理し、それが無効に変わりは私の各()文の特定の条件が満たされたときというのjQueryをしたいと思います。

私は(単なるテストとして)これをしようとしている:

$('#my_list').each(function(){ 
    alert('test'); 
    if($(this).val()=='two')){ 
     $(this).css('background-color':'gray','padding':'10px'); 
    } 
}); 

しかし、警告はオプションリストの値の上に私にその反復を伝えるために発射することはありません。

答えて

5

最初の問題はyou need a # in your selectorことです:

$('#my_list'); 

第二は、あなたがthe option elementsを選択する必要があることselectではありません。

$('#my_list option') 

第三の問題は、あなたが確実なスタイルではないということですとにかくoptionselect要素です。あなたがvalue check into the selectorを置くことによって、上記のコードを達成できる


NB:ここでは、物事の

$('#my_list option[value="two"]').css(...); 
+0

第4の問題は、each()を使用して反復処理するのではなく、その値を持つ項目を検出するセレクタを使用してスタイルを適用するだけでよいということです。 – JohnFx

+0

@John既に存在しました。 – lonesomeday

+0

また、OPではcss属性を直接設定する代わりにaddClassを使用することをお勧めします。 – JohnFx

1

カップル。これはidがmy_listの要素と一致せず、オプションには一致しません。これが行われます。

$("#my_list").children() 

は、それらを非表示にするには、次のようなものを試してみてください:

$("#my_list").children().each(function() {$(this).wrap("<span>").hide();}); 

そして-隠すアンすべてに以下:あなたがアクセス権を持っている。そこから

$('#my_list span').each(
    function() { 
     var opt = $(this).find("option").show(); 
     $(this).replaceWith(opt); 
    } 
); 
0
$('my_list span').each(function(i,item){...} 

iを介してインクリメントするか、$(this)を冗長で不要にする必要があります。

関連する問題