2010-04-19 40 views
3

的重装后扩大我有一个嵌套的UL /李名单JQuery的 - 嵌套的UL /李名单,保持

<ul> 
<li>first</li> 
<li>second 
<ul> 
<li>Third</li> 
</ul> 
</li> 
... and so on 

我发现这个jQuery的interweb为灵感的使用,但如何保持一个在页面重新加载后,我扩展的项目?

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('div#sideNav li li > ul').hide(); //hide all nested ul's 
      $('div#sideNav li > ul li a[class=current]').parents('ul').show().prev('a').addClass('accordionExpanded'); //show the ul if it has a current link in it (current page/section should be shown expanded) 
      $('div#sideNav li:has(ul)').addClass('accordion'); //so we can style plus/minus icons 
      $('div#sideNav li:has(ul) > a').click(function() { 
       $(this).toggleClass('accordionExpanded'); //for CSS bgimage, but only on first a (sub li>a's don't need the class) 
       $(this).next('ul').slideToggle('fast'); 
       $(this).parent().siblings('li').children('ul:visible').slideUp('fast') 
       .parent('li').find('a').removeClass('accordionExpanded'); 
       return true; 
      }); 
     }); 
    </script> 

回答

5

可以保存当前打开的菜单项在cookie $.cookie('menustate')

相似:How to remember last state with Jquery?

+0

+1忘了cookie选项。 – Tomalak 2010-04-19 20:05:57

+1

这不是一个很好的选择,真的,特别是如果启用cookie对于浏览网站来说至关重要。现在情况并非如此,但由于各种原因,人们仍然对曲奇有点粗略。 – dclowd9901 2010-04-19 20:09:25

0

这仅仅在JavaScript中不容易实现。

  • 当页面重新加载时(直接进入源HTML),服务器可以正确设置accordionExpanded CSS类。这需要服务器自然地知道用户点击了什么<li>
  • 或者您避免重新加载页面,并通过AJAX调用进行部分页面更新。这是大多数“现代”网站所做的。
  • 或者你做Glennular建议并将状态信息保存到cookie中。

您的选择。

0

我不知道你的菜单应该准确地做,但如果它是一个导航菜单,可以标记一个简短位添加到您的body元素为每个基地页:

<body class="home"> <!-- for homepage --> 
<body class="about"> <!-- for about page --> 
<body class="etc"> <!-- for etc. --> 

并拥有jQuery的寻找这个标志,并就如何处理列表树上的决定,一旦在页面加载基于在哪个页面上。它不需要设置任何cookie,只要他们已经启用了JS(每个用户都应该在这一点上),一切都是kosh magosh。

2

从页面传递数据时,页面您管理国家以同样的方式:

  • 查询字符串
  • 饼干
  • 表单POST /隐藏字段
  • 阿贾克斯,并从服务器
1

我假设你不喜欢任何以前的答案,因为他们都没有被接受,并呈现给你一个不太“正确”的方式正在做。在我被烧死之前,这只是我尝试用纯js/jq做的。您可以解析出URL(http://example/subsite)并选择相关的部分(为了方便起见,我们假设/子网站是您想要的)。

$(document).ready(function(){ 
    var pathname = window.location.pathname; 
    var splitpath = pathname.split("/");   
    $("#nav-" + splitpath[1] + "").children().class('current') 
}); 

建立你的ID成类似<li id=nav-subsite>和使用解析出URL建立一个选择正确的选项卡/李/不管。这是不是很奇怪?当然,但我想我会扔我的0.02美元