【问题标题】:How to add active class to nav ul li a element when it has some sub pages with it?当它有一些子页面时,如何将活动类添加到 nav ul li 元素?
【发布时间】:2026-01-16 02:50:01
【问题描述】:

我正在开发 Drupal 8 网站。因为我在将活动类分配给导航列表元素时遇到问题。 我使用以下代码设置活动类,它适用于相同的 url。 代码是这样的

 <nav id="getnav">
            <ul>
                <li>
                    <a class="" data-drupal-link-system-path="user" href="/drupal/todo">Todo</a>
                </li>
                <li>
                    <a class="" data-drupal-link-system-path="user" href="/drupal/files">Files</a>
                </li>
                <li>
                    <a class="" data-drupal-link-system-path="user" href="/drupal/photos">Photos</a>
                </li>
           </ul>
</nav>

我使用 jquery 函数来设置基于 url 的活动类。使用以下代码。

 function setActive() {
     var myurl =window.location.href.substr(window.location.href.lastIndexOf("/")+1);
       $("#getnav ul li a").each(function(){
        if($(this).attr("href") == '/drupal/'+myurl )
            $(this).addClass("active");
    });
}
     window.onload = setActive();

真正的问题是每当访问像 todo/page2 这样的子页面时,活动类就消失了。 http://localhost/drupal/todo ::: 工作正常,但在访问子页面后像

 http://loclahost/drupal/todo/add

课程已经下课了。

请给我关于这个问题的建议。

我也想为所有子页面设置 Active 类。在 todo/* 之后

【问题讨论】:

  • 这可以使用纯 CSS 来完成。您可以将idclass 添加到您的body 元素和类到您的nav li 元素吗?
  • 是的,我使用 css 来构建元素
  • 可以使用绝对路径

标签: javascript jquery html drupal nav


【解决方案1】:

您可以使用纯 CSS 来做到这一点。您需要将class/id 添加到您的body 元素和nav li 元素中,然后您可以在CSS 中定义它们的组合以突出显示。例如,假设这是您的 html:

< body id="todo_body">
 <nav id="getnav">
            <ul>
                <li class="todo_dropdown">
                    <a class="" data-drupal-link-system-path="user" href="/drupal/todo">Todo</a>
                </li>
                <li class="files_dropdown">
                    <a class="" data-drupal-link-system-path="user" href="/drupal/files">Files</a>
                </li>
                <li class="photos_dropdown">
</body>
                    <a class="" data-drupal-link-system-path="user" href="/drupal/photos">Photos</a>
                </li>
           </ul>
</nav>
</body>

现在,您可以使用下面给出的 css 将突出显示样式应用于您的“应该处于活动状态”的 li 元素:

#todo_body .todo_dropdown,
#files_body .files_dropdown,
#photos_body .photos_dropdown
{
  background-color: red;
  color: white;
  /*Your css styles for active nav item will come here */
}

您还可以为should be active li 元素中包含的任何元素添加任何样式。

【讨论】:

    【解决方案2】:
      <ul class="nav">
                        <?php
                              $page_name = basename($_SERVER['PHP_SELF']);
    
                         ?>
                        <!-- Main menu -->
                        <li class="<?php echo ($page_name=='dashboard.php')?'current':'';?>"><a href="dashboard.php"><i class="glyphicon glyphicon-home"></i> Dashboard</a></li>
    
                        <li class="submenu <?php echo ($page_name=='welcome_note.php' || $page_name=='corporate_profile.php' || $page_name=='introduction_of_the_township.php' || $page_name=='location_map.php')?'current open':'';?>">
                             <a href="#">
                                <i class="glyphicon glyphicon-list"></i> Masters
                                <span class="caret pull-right"></span>
                             </a>
                             <!-- Sub menu -->
                             <ul>
                                <li class="<?php echo ($page_name=='welcome_note.php')?'current':'';?>"><a href="welcome_note.php">Welcome Note</a></li>
                                <li class="<?php echo ($page_name=='corporate_profile.php')?'current':'';?>"><a href="corporate_profile.php">Corporate Profile</a></li>
                                <li class="<?php echo ($page_name=='introduction_of_the_township.php')?'current':'';?>"><a href="introduction_of_the_township.php">The Township</a></li>
                                <li class="<?php echo ($page_name=='location_map.php')?'current':'';?>"><a href="location_map.php">Location Map</a></li>
    
                            </ul>
                        </li>
                    </ul>
    

    【讨论】:

      最近更新 更多