当子菜单的父级或包含链接处于活动状态时,如何告知子菜单可见


How do I tell a submenu to be visible when its parents or containing links are active?

我有一个HTML菜单,它看起来像这样:

<nav>
 <ul>
   <li><a href="#">Home</a></li>
   <li><a href="#">About</a>
      <ul>
        <li><a href="#">Team</a></li>
        <li><a href="#">Philosophy</a></li>
        <li><a href="#">History</a></li>
      </ul>
   </li>
   <li><a href="#">Projects</a></li>
   <li><a href="#">Services</a>
      <ul>
         <li><a href="#">Our Service</li>
         <li><a href="#">Special Offers</a></li>
      </ul>
   </li>
   <li><a href="#">Contact</a></li>
 </ul>
</nav>

除了一件事之外,所有的东西都通过CSS成形:当其父列表项的链接指向与当前页面地址相同的地址时,使子菜单显示。

我知道这是可能的。但我真的是JavaScript、jQuery或PHP中最棒的一个(我认为后两者的意思是一样的,对吧?)。

我试着复制和粘贴像"OnClick=…"这样的代码片段,还有一个像",或者我发现的包含"GetElenentbyTagName"的代码片段(这几乎奏效了…),但除此之外,我甚至不知道该把它们放在哪里。它们只是工作不正常或根本不正常。我有一个完整的代码片段,但当我把它粘贴进去并替换一些标签名称时,所有的代码都被标记为红色,我试着让它工作了一整天,我的头都烧着了。

我认为这是可能的,因为我看到的东西似乎描述了我想做的事情的一部分。例如

脚本片段应该是

  • 选项A:告诉浏览器,如果用户所在的页面的href地址与菜单中的链接地址相同,则其子菜单(ul li ul)或包含其自身的菜单(ul)应为"visibrity:visible"。

  • 选项B:脚本代码说:"如果用户点击一个菜单项(ul-li),那么它的子菜单(ul-li-ul),如果它有子菜单,或者如果正在点击的菜单项是子菜单之一,那么这个子菜单应该变成"可见性:可见"。如果被点击的项目没有子菜单,那么就不应该显示任何子菜单。

HTML代码不能直接具有(nav)和(/nav)之间的类或其他属性。

我不确定是否理解您的需求,

你需要当用户转到某个菜单页面时,它会得到url并在菜单上激活该链接,直到用户到达该页面,对吗?

如果是这样,

我认为应该这样做:

<script type='text/javascript'>
    $(function(){
        $item = $('ul li a').filter(function(){
            return $(this).prop('href').indexOf(location.pathname) != -1;
        });
        $item.css('visibility','visible'); //or whatever ur using to active it.
    });
</script>

您可以使用CSS:

li ul {
   display: none;
}
li a:hover + ul {
   display: block;
}

http://jsfiddle.net/7bxf6r33/

[编辑]

这项工作:

http://jsfiddle.net/7bxf6r33/7/