You could simplify your code to this (assuming you're adding/removing the classes for selection only and not styling):
$(".question").click(function(){ $(this).children('.answer').slideToggle().end().siblings ('div.question').children('.answer').slideUp(); }); One thing you'll note however is that the answers show briefly and then are hidden by the .each() function. You can hide them with CSS by giving them display:none in your CSS. I'd like to suggest an alternate approach however: A question/answer list is more semantically represented as a definition list, which in addition would simplify your markup, while improving its accessibility: <dl class="qa-list"> <dt>Question</dt> <dd>this is the answer</dd> <dt>Question</dt> <dd>this is the answer</dd> </dl> In your CSS (to hide the answers initially): dl.qa-list dd{ display:none; } The JS: $("dl.qa-list dt").click(function(){ $(this).siblings('dd').slideUp().end().next().slideToggle(); }); On Mar 3, 1:05 pm, Brian Yanosik <byano...@gmail.com> wrote: > The javascript to do this would be the following, thanks everyone for your > help. > > $('.qa-list div').each(function(i) { > $(this).children('.answer').slideUp(); > }); > > $(".question").click(function(){ > var $this = $(this); > if( $this.is('.question') ) { > $this.children('.answer').slideDown(); > $this.removeClass('question'); > $this.addClass('question-answer'); > $this.siblings('.qa-list > div').children('.answer').slideUp(); > $this.siblings('.qa-list > div').removeClass('question-answer'); > $this.siblings('.qa-list div').addClass('question'); > } > else { > $this.children('.answer').slideUp(); > $this.removeClass('question-answer'); > $this.addClass('question'); > } > //return false; > }); > > On Tue, Mar 3, 2009 at 3:45 PM, Brian Yanosik <byano...@gmail.com> wrote: > > So I have the following code and it works great. I am just curious how I > > can adapt it in order to only have 1 answer visible at one time. If once > > item is clicked, then on click of the other item, the last one automatically > > slides up. How would one go about doing this? > > > JS: > > > $(document).ready(function(){ > > $('.qa-list div').each(function(i) { > > $(this).children('.answer').slideUp(); > > }); > > $(".question").click(function(){ > > var $this = $(this); > > if( $this.is('.question') ) { > > $this.children('.answer').slideDown(); > > $this.removeClass('question'); > > $this.addClass('question-answer'); > > } > > else { > > $this.children('.answer').slideUp(); > > $this.removeClass('question-answer'); > > $this.addClass('question'); > > } > > //return false; > > }); > > }); > > > CODE: > > > <div class="qa-list"> > > <div class="question">Question<br /> > > <span class="answer">this is the answer</span></div> > > <div class="question">Question<br /> > > <span class="answer">this is the answer</span></div> > > </div> > > > Thanks > > Brian > > ---------- Forwarded message ---------- > > From: marc0047 <marc0...@gmail.com> > > Date: Tue, Mar 3, 2009 at 3:40 PM > > Subject: [jQuery] Re: slideToggle is jerky in Safari 3.2.1 > > To: "jQuery (English)" <jquery-en@googlegroups.com> > > > Looks like someone else had the same unresolved problem too: > > >http://groups.google.com/group/jquery-en/browse_thread/thread/c929269... > > > On Mar 3, 8:22 am, marc0047 <marc0...@gmail.com> wrote: > > > I am using slideToggle and it performs perfectly in FF, IE6&7, and the > > > new Safari 4. However, in Safari 3.2.1, the elements slide out, but it > > > starts of with a quick jerk and then slides. > > > > Has anyone else run into this problem and found a solution? > > > > Thanks!