如何在侧边栏中使用js单击后保持导航菜单高亮显示

How to keep nav menu highlighted after click using js in sidebar

本文关键字:导航 菜单 显示 高亮 单击 js 侧边栏      更新时间:2023-09-26

我在Wordpress中创建了一个导航菜单,并将其放置在我的子主题的sidebar.php中。

我的导航菜单是在正确的位置和功能,看起来应该与JS的例外,我试图得到正确的,但似乎是失败的。

每个菜单项带您到不同的页面。我希望菜单项保持高亮显示,你是在哪个页面上,一旦你链接到该页。我已经使用CSS使用:hover来突出显示li。

我无法找出如何或在哪里放置js以使其在菜单中突出显示。

  1. 我的JS正确吗?
  2. 我把它放在哪里?直接在sidebar。php中html?还是去别的地方?

谢谢!

$('.main-nav-list').on('click', function () {
                $('li.active').removeClass('active');
                $(this).addClass('active');
            });
.main-nav .main-nav-list li:hover {
 background-color: #323840;
 width: 150px;
 border-radius: 20px; 
}
.main-nav .main-nav-list li:active {
 background-color: #323840;
}
<div class="sidebar sidebar-main <?php echo $sidebar_classes; ?>">
        <div class="inner-content widgets-container">
                <?php generated_dynamic_sidebar($sidebar_name);?>
<div class="nav nav-pills nav-stacked main-nav">
<div class="main-nav-holder">
<ul class="main-nav-list">
<li class="active">
 <a id="sidebar-questions" href="/dwqa-questions">QUESTIONS</a>
</li>
<li class="">
 <a id="sidebar-ask" href="/dwqa-ask-question">ASK A QUESTION</a>
</li>
<li class="">
 <a id="sidebar-ama" href="/ask-me-anything">AMAs</a>
</li>
<li class="">
 <a id="sidebar-jobs" href="/jobs">JOBS</a>
</li>
<li class=“">
<a id="sidebar-find" href="/find-a-health-professional">FIND A HEALTH PRO</a>
</li>
</ul>
</li>

我假设你没有使用任何路由器来保持在同一个页面上。如果是这样,那么一旦用户点击任何链接,浏览器将加载一个全新的页面,所以你的这段代码

$('.main-nav-list').on('click', function () {
    $('li.active').removeClass('active');
    $(this).addClass('active');
});

没有效果,因为它修改了上一页,而该页现在被新页所取代。我认为你可以在页面加载时做的一件事是阅读pathname并突出显示相应的链接。下面是如何做到这一点的一个例子

<script>
    jQuery(function () {
        var pathname = document.location.pathname;
        console.log('the pathname is: ', pathname);
        jQuery('.main-nav-list a').each(function () {
            var value = jQuery(this).attr('href');
            if (pathname.indexOf(value) > -1) {
                jQuery(this).closest('li').addClass('active');
                return false;
            }
        })
    });
</script>

并删除html中所有li元素的active类。

我使用jQuery而不是$,因为:

"当WordPress ' jQuery加载时,它使用兼容模式,其中是一种避免与其他语言库冲突的机制。

这归结起来就是你不能直接使用美元符号就像你在其他项目中做的那样。当你为WordPress编写jQuery时需要使用jQuery代替。"

使用这个javascript函数。这个函数将从浏览器跟踪url,并将"active"类添加到链接中。


祝你好运&编码快乐. .:)

<nav>
    <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/about/">About</a></li>
        <li><a href="/clients/">Clients</a></li>
        <li><a href="/contact/">Contact Us</a></li>
    </ul>
</nav>  
$(function() {
  $('nav a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
});

1。你的jQuery点击处理程序绑定到'ul'标签,这是不正确的,因为'this'的回调函数上下文是由'ul'而不是click li表示。您的代码应该看起来像:

$('.main-nav-list li').on('click', function () {
    $('li.active').removeClass('active');
    $(this).addClass('active');
});

2。如果你在重新加载页面时改变了页面,你可以将导航条状态存储在sessionStorage中,或者从path.

中获取。

试试这个:示例

<ul class="menu-sample">
  <li class="menu-item-sample active"><a href="http://google.com">link 1 here</a></li>
  <li class="menu-item-sample"><a href="http://google.com">link 2 here</a></li>
  <li class="menu-item-sample"><a href="http://google.com">link 3 here</a></li>
  <li class="menu-item-sample"><a href="http://google.com">link 4 here</a></li>
  <li class="menu-item-sample"><a href="http://google.com">link 5 here</a></li>
</ul>
CSS:

.menu-sample {
  list-style: none;
  padding: 5px;
}
.menu-item-sample:hover {
  background-color: red;
}
.menu-item-sample.active {
  background-color: blue;
}

JS:

$('.menu-item-sample').on('click', function() {
  $(this).siblings().removeClass('active');
  $(this).addClass('active');
});

我希望对你有所帮助