扩展和折叠同一父元素中的多个相邻div

时间:2009-09-25 19:23:09

标签: jquery html collapse

我正在努力处理这段代码,我不确定它是否可能。我在单个父元素中有一个div列表,我需要折叠和展开某些集合。这是一个例子:

<div id="parent">
  <div class="alway_show">ALWAYS SHOW ME</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="alway_show">ALWAYS SHOW ME</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
  <div class="collapse_me">COLLAPSIBLE</div>
</div>

因此,在初始状态下,.collapse_me将显示:none。总是会显示一个链接,只展开特定.always_show div下方的折叠div。我知道如果可折叠的div在他们自己的div中,这将容易一千万倍,但我无法控制代码。我必须使用jquery使它工作。可能的?

3 个答案:

答案 0 :(得分:3)

$('div.always_show').nextAll().each(function() {
    if($(this).is('.collapse_me')) {
        $(this).toggle();
    }
    else {
        //this will halt the each "loop", stopping before the next .always_show
        return false; 
    }
});

当然你不应该使用我的初始选择器'div.always_show',而应该提供实际元素,它将是被点击链接的父元素。例如:

$('#expand_anchor').parent().parent().nextAll()...

答案 1 :(得分:0)

var fncdiv = function(){
    var el = this;
    do{
        el = $(el).next();
        if ($(el).hasClass("collapse_me") )
            $(el).toggle();
        else
            break;

    }while (true) 
};

$('#parent div.alway_show').bind("click", fncdiv);

答案 2 :(得分:-1)

您不应该使用jQuery。它只需要一些聪明的CSS:

#parent
{
    /* normal parent css here */
}

#parent div
{
  display: block;
}

#parent.collapsed
{
    display: block;
}

#parent.collapsed div
{
  display: none;
}

选择器按特异性顺序应用。由于'#parent.collapsed div'比'#parent div'更具体,因此它应该覆盖。现在,您需要做的就是设置父div的类,然后就完成了。您可以使用javascript在运行时向DIV添加/删除“折叠”类,以便无需任何额外工作即可切换扩展:

// Mootools:
$('parent').addEvent('click', function()
{
  $('parent').toggleClass('collapsed')
});