如果你想自己做这个(自己写东西很有趣):
我已将 ID 添加#tree
到 root <ul>
,并将 level 1<li>
的文本包装在<span>
:
<ul id="tree">
<li>
<span>parent1</span>
<ul>
<li>child11</li>
<li>child12</li>
</ul>
</li>
<li>
<span>parent2</span>
<ul>
<li>child21</li>
<li>child22</li>
</ul>
</li>
</ul>
要将左右指向父元素的箭头应用到父元素,请创建两个带有背景的 CSS 类,例如(您需要在其他地方找到背景图像或自己制作):
.opened > span {
background: url('arrow_pointing_down.png') left top;
color: #0a0; /* just to make it easy to know which class it has */
}
.closed > span {
background: url('arrow_pointing_right.png') right top;
color: #00a; /* just to make it easy to know which class it has */
}
要在页面加载时隐藏所有子元素...
$('#tree > li').addClass('closed');
// hide the level 2 ul's
$('#tree > li ul').hide();
然后在您的点击处理程序中:
$("#tree > li > span").click(function (event) {
event.preventDefault();
// swap the opened and closed classes
$(this).parent().toggleClass('opened closed');
// toggle the level 2 ul instead of li
$(this).parent().find("ul").toggle();
});
在这里工作演示:http: //jsfiddle.net/cTLGN/
额外的:
此演示代码没有使用缓存对 jQuery 对象的引用来使其更易于阅读。实际上,而不是这样做:
$(this).parent().toggleClass('opened closed');
$(this).parent().find("ul").toggle();
...应该做的:
var parent = $(this).parent(); // search the DOM once for this' parent, and remember it
parent.toggleClass('opened closed');
parent.find("ul").toggle();
.. 因为每次你使用 jQuery 的 $() 构造函数时,它都需要搜索整个 DOM,如果你重复这样做会非常昂贵。