jQuery - 单击一个div,关闭所有其他问题

时间:2012-04-10 19:57:16

标签: jquery html css

我有一组div,当我点击一个时,它应该打开那个特定的div并关闭所有其他打开的div。如果有的话,应该只有一个开放的div。难以排除我从关闭点击的那个。有人有什么想法?要遵循的Javascript和HTML:

    $('.m_box').hide();
    $('.a_box').hide();

    $('#m2012').click(function(){
        //$('.m_box').hide();
        $('#m2012_box').toggle();
    });

    $('#m2011').click(function(){
        //$('.m_box').hide();
        $('#m2011_box').toggle();
    });

    $('#m2010').click(function(){
        //$('.m_box').hide();
        $('#m2010_box').toggle();
    });

    <div id="m2012" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;">
        <div id="m2012_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;">
            <div class="list_header">
                <p>2012</p>
            </div>
            <div class="items">
                <div class="list_item">
                    Milestone 1
                </div>
                <div class="list_item">
                    Milestone 2
                </div>
                <div class="list_item">
                    Milestone 3
                </div>
                <div class="list_item">
                    Milestone 4
                </div>
                <div class="list_item">
                    Milestone 5
                </div>
                <div class="list_item">
                    Milestone 6
                </div>
            </div>
        </div>
    </div>

    <div id="m2011" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;">
        <div id="m2011_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;">
            <div class="list_header">
                <p>2011</p>
            </div>
            <div class="items">
                <div class="list_item">
                    Milestone 1
                </div>
                <div class="list_item">
                    Milestone 2
                </div>
                <div class="list_item">
                    Milestone 3
                </div>
            </div>
        </div>
    </div>

    <div id="m2010" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;">
        <div id="m2010_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;">
            <div class="list_header">
                <p>2010</p>
            </div>
            <div class="items">
                <div class="list_item">
                    Milestone 1
                </div>
                <div class="list_item">
                    Milestone 2
                </div>
                <div class="list_item">
                    Milestone 3
                </div>
            </div>
        </div>
    </div>

7 个答案:

答案 0 :(得分:2)

尝试:

$('.list_header').click(function() {
    $(this).parent().parent().siblings().find('.items').hide();
    $(this).siblings().show();    
});​

证明:http://jsfiddle.net/iambriansreed/J97Kq/

为清晰起见,我的小提琴删除了你的内联CSS。

答案 1 :(得分:1)

要从选择器中排除点击的div的子项(我看到的唯一),您可以使用not

$('#m2012, #m2011, #m2010').click(function() {
    $('.m_box').not($(this).children().show()).hide();
});

UPD:修改了代码,以便打开孩子。

答案 2 :(得分:0)

您应该使用公共类和可见组来选择所有并首先隐藏它们。

$('.m_box').click(function(){
    $('.m_box:visible').hide();
    $(this).show();
});

答案 3 :(得分:0)

有两个很棒的预构建jQuery库可以解决这个问题:

jQuery Tools将提供最大的灵活性,实现这一点应该相对简单。 jQuery UI在某种程度上强迫某种样式,因此如果你想使用库,Tools可能是正确的方法。

答案 4 :(得分:-1)

您可以关闭其他div,检查是否使用:visible selector http://api.jquery.com/visible-selector/

打开它们

答案 5 :(得分:-1)

你可以尝试在点击事件中使用jQuery fadeIn和fadeOut div。这是一个例子;

$('#clickme').click(function() {
  $('#book').fadeOut('slow', function() {
    // Animation complete.
  });
});

这意味着,当单击div点击我时,它会淡出或淡入书籍div

答案 6 :(得分:-1)

你应该使用一个选择器来关闭所有具有某个索引的div,这个选择器会关闭索引大于1的所有div。

 $('#m2012').click(function(){

 $('#m2012_box').toggle();

      //index a integer value

     $("div:gt(1)").hide();

});