我有一个嵌套的 ul “树”,为了这个问题,它只有顶部的几个级别和几个孩子,但是如果你可以假设从顶部 ul(以id="group"
此处为目标)可能有几个嵌套元素,但它们将始终遵循此结构。目前我只有顶部元素在折叠时折叠它们的子 ul 元素。我想在所有 ul 元素中实现这种性质。此外,我还想折叠另一个单击的“同一级别”的打开元素,以便只有一个 ul 与另一个打开。我希望我已经解释了我想要完成的功能。我觉得我应该使用slideToggle()
但每次尝试都以失败告终......我还应该说这是我实际使用的第一手delegate()
但我了解传播(“事件冒泡”),这也是我觉得这是完成此类任务的方式的部分原因。另一个是我可能需要在 ul 中添加新元素。所以这就是我目前所拥有的:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('ul#group').delegate('a', 'click', function(event) {
if($(event.target).next().is(':visible')) {
if($(event.target).next()) {
$(event.target).next().find('ul').slideUp(250, function() {
$(event.target).next().slideUp(250);
});
}
} else {
$(event.target).next().slideDown(250);
}
});
});
</script>
<ul id="group">
<li>
<a href="#" onclick="return false;">Foo Bar 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 1</a>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Foo 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 2</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Bar Foo 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 1</a>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Bar 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 2</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
这是测试用例的jsfiddle 链接。欢迎所有输入以实现这一目标的最佳方式。