我正在试图找出是否有办法使用jquery的slideDown / slideUp / slideToggle函数在我点击它们时为这些可折叠元素设置动画。这是元素的html布局的片段:
<ul>
<li class="category1"><a href="#"></a></li>
<ul>
<div class="tag1">
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
</div>
</ul>
<li class="category2"><a href="#"></a></li>
<ul>
<div class="tag2">
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
</div>
</ul>
<li class="category3"><a href="#"></a></li>
<ul>
<div class="tag3">
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
</div>
</ul>
</ul>
这是我尝试过的javascript代码。它有效,但很长。我想知道是否有更有效的方法来完成同样的事情。
$('.category1').click(function(){
$('.tag1').slideToggle('200');
$('.tag2').slideUp('200');
$('.tag3').slideUp('200');
return false;
});
$('.category2').click(function(){
$('.tag1').slideUp('200');
$('.tag2').slideToggle('200');
$('.tag3').slideUp('200');
return false;
});
$('.category3').click(function(){
$('.tag1').slideUp('200');
$('.tag2').slideUp('200');
$('.tag3').slideToggle('200');
return false;
});
答案 0 :(得分:2)
我很确定你的标记无效,因为只有li
元素应该嵌套在ul
元素中(如果我错了,有人会纠正我)。我将标记更改为:
<ul class="outer">
<li>
<a href="#"></a>
<ul>
<li class="cat1"><a href="#">derp</a></li>
<li class="cat1"><a href="#">derp</a></li>
<li class="cat1"><a href="#">derp</a></li>
</ul>
</li>
<li>
<a href="#"></a>
<ul>
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
<li class="cat2"><a href="#">derp</a></li>
</ul>
</li>
<li>
<a href="#"></a>
<ul>
<li class="cat3"><a href="#">derp</a></li>
<li class="cat3"><a href="#">derp</a></li>
<li class="cat4"><a href="#">derp</a></li>
</ul>
</li>
</ul>
这是脚本:
$(".outer > li > a").on("click", function(event) {
event.preventDefault();
$(".outer ul").slideUp();
var next = $(this).next();
if(next.is(":visible")) { return; }
next.slideDown();
});
And here is the working example
正如您所看到的,我只是向上滑动所有 ul
部分,然后在点击的锚点之后向下滑动下一个部分。
答案 1 :(得分:0)
您需要稍微重新调整列表,您希望将孩子<ul>
保留在父<li>
$('li[class^=category]').click(function(){
var cls = $(this).attr('class');
cls = cls.split('y');
cls = cls[1];
$('.tag'+cls).slideToggle('200');
$('div[class^=tag]').not("div[class=tag"+cls+"]").slideUp('200');
return false;
});