jQuery隐藏并显示多个元素

时间:2013-03-08 16:19:51

标签: jquery html css

我有多个包含照片和文字的div。当用户点击“生物”按钮时,会出现传记文本。

如果点击图像,我该怎么做才能显示生物文字?

如果显示了传记文本并且用户点击了不同的图像,我怎样才能使之前的生物文本消失?我不希望它滑入和滑出而只是淡入淡出。

这是我的jquery:

$('.bio-button').click(function () {
   $(this).siblings('.team-text').toggle();
});

$('.team-text .close').click(function () {
   $(this).parent('.team-text').hide();
});


$('.team-member img, .team-member-minor img').click(function() {
if ( !$(this).next('div').is(':visible') ) {
    $(".team-text").slideUp();
    $(this).next('div').slideToggle();
}
});

$('.close').click(function() {
    $(this).parent().slideUp();
});

这是我的HTML

    <div id="" class="team-member">
    <div class="team-text">
        <p>hello this is Billy's text</p>
        <div class="close"></div>
    </div><!-- .team-text -->
    <div class="team-photo">
        <img width="437" height="293" src="http://www.mgrear.com/clients/gls/wp-content/uploads/2013/02/billy.jpg" class="" alt="billy" />                          
        <h2>Billy Senecal</h2>
        <p>Producer / Director</p>
    </div><!-- .team-photo -->
    <div class="bio-button">BIO</div>   
    <div class="clear"></div>
</div><!-- #team-member -->
<div id="" class="team-member">
    <div class="team-text">
        <p>THis is Mark's text</p>
        <div class="close"></div>
    </div><!-- .team-text -->
    <div class="team-photo">
        <img width="439" height="293" src="http://www.mgrear.com/clients/gls/wp-content/uploads/2013/02/mark.jpg" class="" alt="mark" />                            
        <h2>Mark Montalto</h2>
        <p>Editor / Producer</p>
    </div><!-- .team-photo -->
    <div class="bio-button">BIO</div>   
    <div class="clear"></div>
</div><!-- #team-member -->

以下是DEMO的链接。

2 个答案:

答案 0 :(得分:1)

我不完全确定你要用布局完成什么,但我认为就jQuery而言,这可能会成为你所寻求的。

$('.team-photo, .bio-button').on('click', function(){
    $('.team-text').fadeOut();
    $(this).prevAll('.team-text:hidden').fadeIn();
});

http://jsfiddle.net/kYJBM/

因为'.team-text'元素的默认状态是隐藏的,所以我们只需在每次点击时隐藏它们,然后在fadeIn()上使用':hidden'过滤器,以防止它在已经可见的元素中淡入(这样我们就可以隐藏一个瓷砖,如果用户点击它两次)。我认为令人困惑的是,有两个功能,第二个有条件地运行。这是表达这一点的一种较短的方式:

if ($(this).prevAll('.team-text').css('display') === 'none') {
    $(this).prevAll('.team-text').fadeIn();
}

(为便于阅读而编辑)

答案 1 :(得分:0)

如果你想要瓷砖上的任何地方工作:

$('div.team-photo').click(function(){
  $(this).parent().find('.team-text').is(':visible').hide();
  $(this).siblings('.team-text').toggle();
});

如果您只是想要图片:

$('div.team-photo > img').click(function(){
  $(this).parent().parent().find('.team-text').is(':visible').hide();
  $(this).parent().siblings('.team-text').toggle();
});

在显示自己的元素之前,这两个元素都会隐藏所有其他可见的.team-text元素,如果用户再次点击该事件,则会隐藏相关的.team-text元素。