【问题标题】:Why isn't JQuery changing CSS class?为什么 JQuery 不改变 CSS 类?
【发布时间】:2020-11-24 16:45:11
【问题描述】:

有谁知道为什么下面的 JQuery 不能正常工作?当我单击导航栏中的链接时,我希望它更改样式(背景和字体颜色):

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <script>
            $(document).ready(function(){
                $("ul li a").click(function(){
                    $(this).addClass("active");
                });
            });
        </script>

我确信 CSS 是正确的,因为当我将 class="active" 硬编码到 HTML 中时,它采用了正确的样式。但是,目前,当我单击导航栏中的任何链接时,导航栏中的所有链接都会闪入和闪出我希望刚刚单击的链接更改为的样式。希望这是有道理的。目前结果看起来类似于 CSS :active 选择器,但是当我点击导航栏中的 1 个链接时,所有链接都会闪烁。

这里是 HTML 元素:

            <li><a href="/">Home</a></li>
            <li><a href="/repository">Repository</a></li>
            <li><a href="/events">Events</a></li>
            <li><a href="/bio">Bio</a></li>
            <li><a href="/contact">Contact</a></li>
        </ul> 

提前致谢。

如果它有所作为,我还在这个网站上使用 Flask 和 Bootstrap。 任何帮助,将不胜感激。如果一切顺利,这将是我的第一个网站。

【问题讨论】:

  • 链接的 HTML(包括href)是什么样的?当您在测试中对 class="active" 进行硬编码时,您将它添加到什么元素中?
  • 刚刚将它们编辑到我的帖子中。
  • 还有另一个问题?让我们不要像你的名字一样神秘吗? ;-)
  • 页面是否刷新?因为如果是这样,您的 Javascript 也会刷新。如果你不取消锚标签的默认动作,在这种情况下,转到这个页面,它是非ajax的,所以服务器会刷新到那个页面,从而取消你所有的动作。
  • @T.J.Crowder 我正在尝试将class="active" 添加到列表的相关项目中。例如。 &lt;li&gt;&lt;a href="/" class="name"&gt;Home&lt;/a&gt;&lt;/li&gt;我不确定我是否理解您的问题,但希望这就是您需要的答案。我正在寻找向 添加类。哈不是故意的。我一直在考虑换成Zathras。啊,完全不是故意的。也许

标签: jquery css flask bootstrap-4


【解决方案1】:

请试试这个

$(document).ready(function(){
            $("li").find("a").on("click",function(){
                $(this).addClass("active");
            });
        });

【讨论】:

  • 这对我不起作用。不过感谢您的评论。
【解决方案2】:

你说过链接看起来像这样:

<ul class="navvy" id="responsive-navvy"><li><a href="/">Home</a></li>

并且您已经说过要关注该链接。

跟随那种链接会触发对服务器的请求,然后当收到响应时,浏览器会拆除页面的DOM(包括你对class所做的任何更改)并替换它解析新页面的 HTML 的结果。

您需要:

  • 不要点击链接,或者
  • 在页面加载时添加类以匹配加载页面的路径

看第一个:如果你不点击链接,那么当然没有对服务器的请求并且你没有得到响应;您必须以不同的方式更新页面。您可以使用replaceStatepushState 在不更改页面内容的情况下更新URL,然后通过DOM 操作单独更改页面内容。

看第二个:如果您想跟随链接并让服务器驱动内容,您可以在页面加载时添加一些代码以突出显示相关的导航链接。大致如下:

$(function() {
    $("ul li a[href=" + location.pathname + "]").addClass("active");
});

【讨论】:

  • 好的,非常感谢您的回答。晚饭后我会试试看。我不会使用 replacestate 或 pushState,因为它们似乎没有太多浏览器支持。
  • @AmbassadorKosh - 它们具有近乎通用的浏览器支持并且被广泛使用。也许您正在查看有关是否使用title 的行,这确实没有得到很好的支持(但也不需要)。
  • 感谢您的澄清!我还没有让它工作,但我想知道我是否已经咬得比我在这里可以咀嚼的更多,因为我仍然是一个初学者。不过,我真的很感谢你的帮助。我很想走更简单的路线,对我来说,这就是将导航栏硬编码到每个 HTML 页面上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2013-09-27
  • 1970-01-01
  • 2018-11-21
  • 2013-02-04
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多