2012-07-20 9 views
5

<dl>があります。<dd>がすべて非表示になっています。 <dt>をクリックすると、次のコードを使用して、それに従ってください<dd>の切り替わり:今複数の要素の兄弟()を選択するにはどうすればよいですか?

$(this).nextUntil('dt').toggle(); 

http://jsfiddle.net/mblase75/FZQj7/

を、私は自動的に他の<dt>秒以下<dd> Sを非表示にしたいので、私はつかむしよう

$(this).nextUntil('dt').toggle() 
    .siblings().filter('dd').hide(); 

http://jsfiddle.net/mblase75/FZQj7/1/

:このコードの兄弟3210

しかし、すでに.nextUntilで選択した<dd>はお互いの兄弟であるため、何も起こりません。結果として、彼らはすべて隠され、何も表示されません。

すでに選択したものを除いてすべての兄弟を選択するようにjQueryに指示するコンパクトな方法が必要ですが、私はそれを見ることができません。アイデア?

答えて

2

あなたは親からそれを行うことができます:

$('dt').on('click',function() { 
    $(this).nextUntil('dt').toggle().siblings("dt").not(this).nextUntil('dt').hide(); 
});​ 

http://jsfiddle.net/FZQj7/7/

+0

そこに賢明な側面思考。ちなみに、 '.parent()。find(" dt ")'を '' dt ''に短縮することができます。これはlbstrがそれをする前に気づかなかったものです。 – Blazemonger

+0

@Blazemongerこれらの2つのメソッドを.siblings()に変更するだけでは不十分です。http://jsfiddle.net/FZQj7/13/ –

+0

これは私が使っている解決策です:http://jsfiddle.net/mblase75/FZQj7/14/- の優雅さと一本鎖の連鎖のために他よりも優先されました。 – Blazemonger

3

これはいかがですか? not関数which you can read about hereの使用に注目してください。

http://jsfiddle.net/lbstr/FZQj7/6/

$('dt').on('click',function() { 
    var $this = $(this), 
     $firstGroup = $this.nextUntil('dt'); 
    $firstGroup.toggle(); 
    $this.siblings('dd').not($firstGroup).hide(); 
});​ 
+0

うんは、自分自身をそれを考え出しました。投稿しようとしていたが、あなたはそれに私を打ち負かす。 – Blazemonger

+0

@Blazemonger私はいつもそれをする!ちょうど考え...あなたの場合、 'dd'要素と' dt'要素のすべてを兄弟にすることは理にかなっていますか?彼らがそれ自身の 'dl'でグループ化されるように構文的に意味をなすかもしれないようです。そして、この問題は解決しやすくなります。 – lbstr

+0

さて、実際にはテーブルの行を表示して隠しています。単純なコードなので、例のためだけに定義リストを使用しました。 – Blazemonger

1

簡単な解決策は、あなたが示す要素にクラスを適用することです。クリックするたびに、このクラスで要素を非表示にしてから目的のセットを表示できます。

http://jsfiddle.net/FZQj7/11/

$('dt').on('click',function() { 
    $('.visibledd').hide().removeClass('visibledd'); 
    $(this) 
     .nextUntil('dt') 
     .toggle() 
     .addClass('visibledd'); 
});​ 
+0

私はこのアイデアが気に入っていますが、 'dt'グループをもう一度クリックして崩壊させることはできません。 – lbstr

0

ここではこれらの他のものより少し単純なものだ:

$('dt').on('click',function() { 
    $(this).siblings('dd').hide(); 
    $(this).nextUntil('dt').show(); 
}); 
+0

これは、 '

'のすべてを隠すことができず、同じ「
」の2回目のクリックを隠すことができないためです。 – Blazemonger

+0

申し訳ありません。私は要件を誤解しているようだ... – ShaneBlake

関連する問題