2012-01-19 8 views
2

これは間違った方向に進むかもしれません。私はリンクとフォームオプションのコンテナを持っています。リンクをクリックすると、オプションが選択されます。別のオプションが選択されている場合にそのオプションを選択解除するには、特定のクラスまで親要素を反復して、そのオプションに対して選択した値を削除する必要があります。parentsと一緒に選択したオプションを削除してください。

ここにHTMLの一部を示します。

<ul class="cssClass"> 
    <li><div class="first-elem">Select<span></span></div> 
    <ul> 
     <li><a href="#firstValue">First Value</a></li> 
     <li><a href="#secondValue">Second Value</a></li> 
    </ul> 
    </li> 
    <li> 
    <select name="someSelect"> 
     <option value="">Select</option> 
     <option value="firstValue">First Value</option> 
     <option value="secondValue">Second Value</option> 
    </select> 
    </li> 
</ul> 

ここはjQueryの始まりです。残りの部分を除外したので、removeAttr部分以外はすべて動作しています。

$(".cssClass li a").click(function(e) { 
    e.preventDefault(); 
    $(this).parentsUntil('.cssClass','option').removeAttr("selected"); 

これは機能しません。これを行う別の方法がありますか?

+0

あなたはjQueryのの意味を理解するために、いくつかのサンプルマークアップを示してもらえますか? –

+0

が更新されました。 removeAttr部分を除いてすべてが機能しています。 –

答えて

2

parentsUntilの第2引数は、選択クエリをしないように、フィルタリングすることです。 良いが、この

$(this).closest('.cssClass').find('option').removeAttr("selected"); 
+1

あなたは私の正気を救った、私は早く見つけたが、私は最も近いものを使用しなかった。ドー!私は今家に帰ることができます。ありがとう。直接セレクタを送信する他の人は、アンカーがクリックされたクラスを含むだけでなく、すべてのオプション値を削除します。 –

0

私はあなたが別の方法で事を取得しようとした場合、おそらくマークアップを知らないが:

$("#theselectbox option:selected").removeAttr("selected"); 
1

を使用parentsUntilの最初のパラメータが正しくありません。それは次のようになります

$(this).parentsUntil($('ul.cssClass'), 'option').removeAttr("selected"); 
parentsUntil

の最初のパラメータは次のようになります

祖先要素に一致停止する場所を示すためのセレクタ式を含む文字列。

あなたの2番目のパラメータは罰金だろう、しかし、2番目のパラメータは.findが、フィルターではありませんので、select文は、実際に削除するために道に沿って任意のオプションを見つけるだろうということは表示されません。 だからあなたのようなもの、まったく別のものを使用する必要がある場合があります

$('ul.cssClass option:selected').removeAttr('selected'); 
0

はそのマークアップを与える:

$(".cssClass li a").click(function(e) { 
    e.preventDefault(); 
    $('select[name="someSelect"]').find('option[value="' + this.href.substring(1) + '"]').prop('selected',true); 
}); 
関連する問題