我正在努力处理这段代码,我不确定它是否可能。我在单个父元素中有一个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使它工作。可能的?
答案 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')
});