javascript - 通过Jquery加载navbar时设置active类

标签 javascript html css

在将导航菜单作为单独的 html 文件加载时,我正在尝试使用 jquery 初始化导航菜单的事件类。

我不熟悉 PHP,而且我对网站生成还很陌生,所以我不太熟悉 JS 以及常用语言(HTML、CSS 和 JS)之间的集成。我搜索了整个 Stack Overflow 并尝试了几个解决方案,但我显然遗漏了一些东西:

我认为我的问题与等待页面加载有关。我实现了一个有效的“点击”功能,但当我实际在菜单中加载页面时,它确实将类设置为事件 <li> .

编辑:澄清一下,我通过点击事件成功设置了事件类,背景将变为蓝色。但是,当菜单链接实际激活时,背景会闪烁蓝色,然后重新加载为黑色。我想弄清楚如何在通过 Jquery 调用导航菜单时设置事件类。为了证明我的风格适用于点击事件,请看截图here .

这是我现在拥有的简化版本:

index.html

<!DOCTYPE html>
<html>
<head>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
</head>

<body>
<div class="container">
    <!--Navigation bar-->
    <div id="nav-placeholder"></div>
    <script>
            $("#nav-placeholder").load("nav.html");
    </script>
    <!--end of Navigation bar-->

    <div class="mainBlock">
        <div class="mainPage">
            <div class="mainContent">
                <p>Welcome! This is my website.</p>
            </div>
        </div>
    </div>

</div>
</body>

</html>

nav.html

<!DOCTYPE html>
<html>
<div class="navbar">
    <ul>
        <li><a href="/index.html" id="navHome">Home</a></li>
        <li><a href="/ref.html" id="navRef">References</a></li>
    </ul>

    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script type="text/javascript">
        $(document).on("click", "ul li", function(){
            $('.navbar li').removeClass('active');
            $(this).addClass("active");
        })
    </script>

        // Inserted scripts here based on other stackoverflow posts
</div>
</html>

样式.css

.navbar {
    width: 1000px;
    background: #000;
    text-align: left;
}

.navbar ul {
    margin: 0px;
    padding: 0px;
}

.navbar ul li {
    list-style-type: none;
    display: inline-block;
    padding: 5px 10px;
    color: #fff;
    text-decoration: none;
    border-right: 1px solid #fff;
}

.navbar ul li .active{
    background: #33b;
}

.navbar ul li a:hover {
    border-bottom:3px #FFF solid;
}

.navbar a:link {
    color: #fff;
    text-decoration: none;
}

.navbar a:visited {
    color: #fff;
    text-decoration: none;
}

我希望导航菜单中的当前元素得到一个蓝色高亮显示。当点击但未被选中时(即页面实际上并未加载),这已成功设置为事件类(背景为蓝色)。

最佳答案

您遇到此问题是因为样式未应用于 li 元素。 .navbar ul li .active 将在以下层次结构中查找具有类 .active 的元素 .navbar 元素 -> ul 元素 -> li 元素 -> .active 元素。

而您希望将样式应用到类为 .active 的 li 元素。为此,您需要如下提及选择器。

(标签和类名之间没有空格)

.navbar ul li.active{
    background: #33b;
}

上面的选择器将引用一个带有 .active 类的 li 元素。 如果您有兴趣,那么您可以阅读有关选择器的更多信息 herehere

index.html

<!DOCTYPE html>
<html>
<head>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>

<body>
<div class="container">
    <!--Navigation bar-->
    <div id="nav-placeholder"></div>
    <script>
            $("#nav-placeholder").load("nav.html");
    </script>
    <!--end of Navigation bar-->

    <div class="mainBlock">
        <div class="mainPage">
            <div class="mainContent">
                <p>Welcome! This is my website.</p>
            </div>
        </div>
    </div>

</div>
</body>

</html>

导航.html

<div class="navbar">
    <ul id="navItems">
        <li><a href="/index.html" id="navHome">Home</a></li>
        <li><a href="/ref.html" id="navRef">References</a></li>
    </ul>
<script>
      $(function(){
    var current = location.pathname;
    $('#navItems li a').each(function(){
        var $this = $(this);
        // if the current path is like this link, make it active
        if($this.attr('href').indexOf(current) !== -1){
            $this.parent().addClass('active');
        }
    })
})
</script>
</div>

在css中改变事件类样式

.navbar ul li.active{
    background: #33b;
}

关于javascript - 通过Jquery加载navbar时设置active类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176001/

相关文章:

javascript - 同一域,不同子域上的跨站点脚本

javascript - 如何将 boolean 对象分配给值?

javascript将内容加载到div中错误:0

javascript - 如何将 HTML 页面添加到 React 应用程序

ruby-on-rails-3 - 在哪里最好使用 twitter-bootstrap 编辑 CSS

javascript - 转换分钟 -> hh :mm. 可能的最短代码(一行?)

php - 在偶数上添加 tr 元素

html - div 不水平和垂直居中

Css Transitions一个接一个

css - Angular.js - 输入两个输入后更改内容?