【发布时间】:2013-11-28 09:46:56
【问题描述】:
我有一个带有可折叠子菜单的菜单,有 3 级菜单,它工作正常,但是当您单击折叠父级时,我不知道如何折叠所有子级。
它的工作方式是,如果您单击级别 1,它会展开级别 2,然后如果您单击级别 2,则会展开级别 3。
问题是,当所有级别都打开时,我需要能够单击级别 1 并将级别 2 和 3 折叠在一起。我目前正在使用 slideToggle。
我在下面粘贴了我的代码,我知道这是一种非常垃圾的方法,但我不得不为菜单项分配假的 H 标记,因为它是由 ASP:Menu 控件生成的,并且它没有提供唯一的 ID菜单项,所以我必须想办法解决它。
HTML:
<div id="Div1" class="MenuBar">
<a href="#Menu1_SkipLink" style="position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;">Skip Navigation Links</a>
<div class="mainmenu" id="Div2">
<ul class="level1">
<li><a class="level1 staticItem level1">
<img src="/images/calculator.png" alt="" title="" class="icon" /><h7>Financial</h7></a></li>
<li><a class="level2 staticItem level2">
<h10>Address</h10>
</a></li>
<li><a class="level3 staticItem level3" href="javascript:openNewWin('/Controls/Financial/AddressBook.aspx')">
<h11>Address Book</h11>
</a></li>
<li><a class="level3 staticItem level3" href="javascript:openNewWin('/Controls/Financial/CustomerTypes.aspx')">
<h12>Customer Types</h12>
</a></li>
<li><a class="level1 staticItem level1">
<img src="/images/container.png" alt="" title="" class="icon" /><h8>Container</h8></a></li>
<li><a class="level2 staticItem level2">
<h13>Containers</h13>
</a></li>
<li><a class="level1 staticItem level1">
<img src="/images/product.png" alt="" title="" class="icon" /><h9>Product</h9></a></li>
</ul>
</div>
<a id="Menu1_SkipLink"></a>
</div>
jQuery:
$(function () {
//When opening the page all level 2 and level 3 items must be hidden.
$(function () {
hideitems();
})
function hideitems() {
$('h10').slideUp();
$('h11').slideUp();
$('h12').slideUp();
$('h13').slideUp();
}
//Financial Click
$(document).ready(function () {
$('h7').click(function () {
$('h10').slideToggle();
});
});
//Address Click
$(document).ready(function () {
$('h10').click(function () {
$('h11').slideToggle();
$('h12').slideToggle();
});
})
});
任何关于如何折叠所有子级别的建议将不胜感激,因为我不是 JS 大师。
【问题讨论】:
-
不同之处在于我不能修改 UL 中的任何内容,包括提供类或 ID。
-
这听起来太糟糕了,因为标记生成器完全不了解 HTML 的基础知识。
-
是的,你是对的。我尝试了很多创建菜单的方法,而 ASP:menu 让我最接近。我快到了,但这只是我需要做的最后一件事才能使其正常工作。
-
好吧,创建嵌套元素只需要 2/3 简单的 for 循环 + 一个数组/对象。无需使用第三方工具。
标签: c# javascript jquery asp.net webforms