2011-04-28 55 views
2

目前,单击h2标签可以用slideToggle切换div。但是,我试图淡入和出h2标签中的.hint_text_heading。所以,最初,我至少试过要做什么,我将一个.active类添加到打开的h2标记中,然后在.hint_text_heading中淡出。但是,当我关闭div时,我无法使.hint_text_heading淡出。jQuery切换帮助

有什么建议吗?谢谢!

HTML

<h2 class="collapsible_head">This is a title.<span class="hint_text_heading">This is a hint.</span></h2> 
<div> 
    This is the toggled content. 
</div> 

jQuery的

$(document).ready(function(){ 
    $('span.hint_text_heading').hide(); 
    $('h2.collapsible_head').click(function() { 
     $(this).next().slideToggle('slow'); 
     $(this).toggleClass('active'); 
     $('h2.active span.hint_text_heading').fadeIn(); 
    }).next().hide(); 
}); 

UPDATE/

下面是的jsfiddle一个例子。正如你所看到的,div切换和提示文本淡入,但是,当div被隐藏时,提示文本仍然存在。我试图让淡出:

http://jsfiddle.net/UGHgx/

+0

你是什么意思,“当你关闭div”? – mattsven 2011-04-28 12:34:41

+0

更新的问题。 – stewart715 2011-04-28 12:36:31

+0

但关闭div的事件是什么?第二次点击? – Andre 2011-04-28 12:36:54

回答

5

我认为这是你想要什么:

CSS:

span.hint_text_heading { display: none; } 

的jQuery:

$('h2.collapsible_head').click(function() { 
    $(this).next().slideToggle('slow'); 
    //$(this).toggleClass('active'); 
    $('span.hint_text_heading', this).fadeToggle(); 
}).next().hide(); 
+0

更好。谢谢。 – stewart715 2011-04-28 12:43:03

+0

感谢队友,你的代码也可以帮助我获得关于'fadeToggle()'的一些知识。 – thecodeparadox 2011-04-28 12:48:02

+0

没问题。乐意效劳。 – mattsven 2011-04-28 12:56:15

4

如何:

$(function(){ /* shorthand for $(document).ready(function(){ */ 

    $('span.hint_text_heading').hide(); 
    $('h2.collapsible_head').click(function() { 

     $(this).next().slideToggle('slow'); 
     $(this).toggleClass('active'); 
     $('h2.active span.hint_text_heading').fadeIn(); 
     $('h2:not(.active) span.hint_text_heading').fadeOut(); 

    }).next().hide(); 

}); 

编辑:
我也建议删除$('span.hint_text_heading').hide();,只是把display:none;作为一种风格,这是额外的JavaScript不需要的地方。

+0

当有jQuery时,总会有一种方法。谢谢。 – stewart715 2011-04-28 12:39:20

+0

NeXXeuS说的是一个较短的工作版本:) – Kokos 2011-04-28 12:41:23

1

你想要这个;

$(document).ready(function(){ 
    $('span.hint_text_heading').hide(); 
    $('h2.collapsible_head').click(function() { 
     $(this).children('.hint_text_heading').fadeOut().end().next().slideToggle('slow'); 
     $(this).toggleClass('active'); 
     $('h2.active span.hint_text_heading').fadeIn(); 
    }).next().hide(); 
}); 

如果不是,请评论我,我会尽力给你解决方案。

+0

是的,这也适用,但NeXXeus的答案更巩固了:)谢谢。 – stewart715 2011-04-28 12:44:43

+0

@masedesign嗨,朋友,谢谢你的评论。 – thecodeparadox 2011-04-28 12:46:15

0

那么,快速和肮脏的解决方案:

http://jsfiddle.net/CpVSC/12/

$('span.hint_text_heading').hide(); 
$('h2.collapsible_head').click(function() { 

    $(this).next().slideToggle('slow'); 
    if($(this).hasClass('active')){ 
      $('.hint_text_heading').fadeOut(); 
     }else{ 
    $('span.hint_text_heading',this).fadeIn(); 
} 
    $(this).toggleClass('active'); 
}).next().hide(); 
0

工作代码(测试):

$(document).ready(function() { 
    $('h2.collapsible_head').click(function() { 
     $('h2.active span.hint_text_heading').hide(); 
     $(this).next().slideToggle('slow'); 
     $(this).toggleClass('active'); 
     $('h2.active span.hint_text_heading').fadeIn(); 
    }).children().hide().end().next().hide(); 
}); 

这里的小提琴: http://jsfiddle.net/UGHgx/3/