entry Jquery版的简单Accordion效果

还在使用mootools的时候,就非常喜欢这个Accordion(折叠菜单)效果,特别是slideUp和slideDown的滑动,接近flash的效果。今天我们就来用jquery来制作一个简单的Accordion效果。

首先准备好html结构,因为是针对sandbox template,它的sidebar结构是这样的:

<div class="sidebar">
<ul class="xoxo">
<li class="widget">
<h3 class="widget-title">content 1</h3>
<ul>
<li>this is content under content 1</li>
<li>this is content under content 1</li>
</ul>
</li>
<li class="widget">
<h3 class="widget-title">content 2</h3>
<ul>
<li>this is content under content 2</li>
<li>this is content under content 2</li>
</ul>
</li>
</ul>
</div>

有了结构,我们就可以开始对结构做文章了,先把所有需要折叠的内容先隐藏:

$('li.widget > ul').hide();

这里我们使用的 > 相似于CSS中的一级子元素选择符,隐藏所有第一级的ul元素。

接着我们设定折叠的控制器,本例中我们使用h3:

$('li.widget > h3').click(function() {
var content = $(this).next();
content.slideToggle('fast');
});

next()来获得跟h3平级的下一个元素,也就是我么不能够结构中的ul,然后用slideToggle来执行折叠动作,也就是slideUpslideDown。这时候我们已经可以进行正常的折叠操作了,但是我想要做到同时只能展开一个内容,该如何处理?

其实也不难,jquerySelectors很强大,看看怎么做:

var others = content.parent().siblings("li.widget").find("ul:visible");

这里的parent()用来获取父元素,find()就是遵循一定的规则(使用Selectors)去查找符合条件的元素,本例中查找li.widget下的所有visible(CSS属性visibility:visible; 也就是本例中被展开的)的ul元素。

最后我们得到这样的内容:

$(document).ready(function(){
$('li.widget > ul').hide();
$('li.widget > h3').click(function() {
var content = $(this).next();
var others = content.parent().siblings("li.widget").find("ul:visible");
if (others.length ) {
others.slideUp('fast', function() {
content.slideToggle('fast');
});
} else {
content.slideToggle('fast');
}
});
});

一个简单的效果看这里

Related Posts

6 Responses to Jquery版的简单Accordion效果

  1. 很酷。不过,点开一个菜单以后,再点一下标题不能缩回来。

    你的sidebar文件和相应的 css 代码可以发给我一份吗?非常感谢。dupola.com @ gmail.com

  2. 貌似是有这个问题,修改一个地方就可以了var others = content.parent().siblings("li.widget").find("ul:visible");

  3. 已经好了。我看你的侧边栏,好像可以指定某个区块默认收起或展开,是这样的吗?

  4. 默认的UL都是收起的,要展开某个项目,比如“友情链接”$('li#links > ul').show();

  5. if(other.length)是什么意思啊,对不起,我是新手。请赐教

  6. @烨 other.length数组的长度,如果是0,那if(0)就不会执行下去

Leave a Reply

Mail will not be published