【问题标题】:How to Keep Nested <li> <a> tag active and visible?如何使嵌套的 <li> <a> 标签保持活跃和可见?
【发布时间】:2016-04-17 16:50:12
【问题描述】:

我有这个网站http://firesafetyexpo.in/(我指的是左侧嵌套列表菜单)。

当我点击带有子链接的菜单(例如“关于印度消防与安全”-> 里面的任何链接)时,页面会打开,但“点击”菜单不可见。我想让整个&lt;ul&gt; 与子链接(&lt;li&gt;)一起看到。

这里是html代码:

<li class="active"><a href="index.html"><span>Welcome</span></a></li>
<li class='has-sub'><a href=""><span>About Fire & Safety India</span></a>
  <ul>
    <li><a href="pdf/Fire-Safety-Layout.pdf" target="_blank"><span>Floor plan</span></a></li>
    <li><a href="media-partners.html"><span>Support and Media Partners</span></a></li>
    <li class='last'><a href="organisers.html"><span>About Organisers</span></a></li>
  </ul>
</li>

这里是jquery代码:

  ( function( $ ) {
      $( document ).ready(function() {
      $('#cssmenu > ul > li > a').click(function() {
      $('#cssmenu li').removeClass('active');
      $(this).closest('li').addClass('active'); 
      var checkElement = $(this).next();
        if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
          $(this).closest('li').removeClass('active');
          checkElement.slideUp('normal');
        }
        if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
          $('#cssmenu ul ul:visible').slideUp('normal');
          checkElement.slideDown('normal');
        }
        if($(this).closest('li').find('ul').children().length == 0) {
            return true;
        } else {
            return false;   
     }      
   });
   });
   } )( jQuery );

【问题讨论】:

    标签: javascript jquery menu html-lists submenu


    【解决方案1】:

    单击菜单时,整个页面都会刷新,从而使 HTML 也刷新。这样一来,您使用 JavaScript 完成的所有 DOM 操作都将丢失。无论是添加特定类还是删除元素。

    解决问题的一种方法是使整个应用程序成为 SPA(单页应用程序)。但我不相信再次编写整个网站是值得的。

    您在这里可以做的最简单的事情可能就是获取 URL 并在您的域名之后获取子字符串。您的所有 HTML 元素都应具有与您的路由相同的 ID。这样,您可以简单地选择与您的 URL 子字符串具有相同 ID 的元素并添加类 active

    ---编辑---

    好的,首先我会告诉你我在浏览你的网站时看到的一些事情。导航中的大多数链接什么都不做。如果您不需要它们,请删除它们...

    您可以轻松地在文件夹中组织您的 html 文件。例如,您将拥有一个存储所有 .html 文件的主文件夹。 index.html 直接在里面。在index.html 旁边创建文件夹about 并放置从导航中的“关于”选项卡调用的所有.html 文件。

    这样您的网址将类似于http://firesafetyexpo.in/about/media-partners.html

    修复导航中的href(例如href=about/media-partners.html)。

    为导航中的所有主要标签添加 ID。 (&lt;li id="about" class='has-sub'&gt;&lt;a href=""&gt;&lt;span&gt;About Fire &amp; Safety India&lt;/span&gt;&lt;/a&gt;(你不需要 在这里......这取决于你。你会得到与 &lt;li id="about" class='has-sub'&gt;&lt;a href=""&gt;About Fire &amp; Safety India&lt;/a&gt; 相同的结果)。

    最后将此函数添加到您的 JavaScript 文件中。

    $(function() {
        $('#cssmenu a#' + location.pathname.split("/")[1]).addClass('active');
    });
    

    我没有尝试过这段代码。我真的希望它有效(:

    【讨论】:

    • 谢谢。但是我需要代码来理解这一点,因为我不是一个成熟的程序员。你能分享一些代码,这样我就可以继续剩下的了..
    • 编辑了我的答案。我希望这对您有所帮助。
    • 感谢您的编辑。我尝试了您的上述解决方案,但它不起作用。
    • 感谢您的编辑。我尝试了您的上述解决方案,它不起作用。问题:1.id="about"(您的上述建议)有什么用,2.我尝试删除/保留我粘贴在这里的上述 JS 代码并使用您的 js 代码,它仍然不起作用。如果我将原始菜单的 zip 文件分享给您,您可以试试吗?这是[链接] (firesafetyexpo.in/Elegant-Accordin%20-Menu1.zip)。我的要求: - 子菜单选项卡的父链接也应该是可点击的(一个 html 页面)+ 子菜单应该是可见的。如果你试试这个,我会很感激你。等待中。谢谢。
    猜你喜欢
    • 2013-07-28
    • 2021-07-30
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2016-04-09
    相关资源
    最近更新 更多