【问题标题】:How do I add/remove active class for a ul list?如何为 ul 列表添加/删除活动类?
【发布时间】:2018-12-09 10:00:45
【问题描述】:

单击时,活动类会留下原来的“li”,它应该已经改变了。我尝试弄乱代码,但无法找到解决方案。有人可以检查我错过了什么。我想我正在为我的代码添加一些特定的东西。我尝试“使用 jquery 为 ul 列表添加/删除活动类?”但这并没有帮助。如果您能在我的代码中找到错误,那就太好了。

HTML:

<div class="collapse navbar-collapse navbar-ex1-collapse">
    <ul class="nav navbar-nav navbar-right">
        <li class="active"><a href="#juk">About</a></li>
        <li><a onclick="myFunction1()">Development</a></li>
        <li><a href="http://docs.kde.org/stable/en/kdemultimedia/juk/index.html">Wiki/Documentation</a></li>
        <li><a onclick="myFunction()">Screenshots</a></li>
        <li class="dropdown">
        <a data-toggle="dropdown" class="dropdown-toggle" href="#">Releases </a>
        <ul class="dropdown-menu">
            <li><a href="ftp://ftp.kde.org/pub/kde/stable/latest">JuK Latest</a></li>
            <li><a href="http://developer.kde.org/~wheeler/files/src/juk-1.95a.tar.gz">JuK 1.95</a></li>
            <li><a href="http://developer.kde.org/~wheeler/files/src/juk-1.1.tar.gz">JuK 1.1</a></li>
            <li><a href="http://developer.kde.org/~wheeler/files/src/juk-1.0-1.tar.gz">JuK 1.0</a></li>
        </ul>
        </li>
        <li><a href="#contactus">Contact Us</a></li>
    </ul>
</div>

JS:

$(function() {
    ( 'ul.nav.navbar-nav.navbar-right li' ).on( 'click', function() {
        $( this ).parent().find( 'li.active' ).removeClass( 'active' );
        $( this ).addClass( 'active' );
    });
});

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

您在.on('click') 事件中定位了错误的&lt;li&gt; 元素

你说

$( 'ul.nav navbar-nav navbar-right li' )

它将查找li,它是navbar-right 的子代,也是navbar-nav 的子代,也是ul.nva 的子代。

你的目标应该是:

$( 'ul.nav.navbar-nav.navbar-right li' )

注意到li 之前的空格了吗?那是因为它是具有多个类的ul 元素的后代。

我知道你从 HTML DOM 元素中复制了类列表,但是如果你谈论的是一个包含多个类的元素,你必须避免在 jQuery 选择器中使用空格。

$(function() {
  $('ul.nav.navbar-nav.navbar-right li').on('click', function() {
    $(this).parent().find('li.active').removeClass('active');
    $(this).addClass('active');
  });
});
.active {
  background-color: gold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<div class="collapse navbar-collapse navbar-ex1-collapse">
  <ul class="nav navbar-nav navbar-right">
    <li class="active"><a href="#juk">About</a></li>
    <li><a>Development</a></li>
    <li><a href="#">Wiki/Documentation</a></li>
    <li><a >Screenshots</a></li>
    <li class="dropdown">
      <a data-toggle="dropdown" class="dropdown-toggle" href="#">Releases </a>
      <ul class="dropdown-menu">
        <li><a href="#">JuK Latest</a></li>
        <li><a href="#">JuK 1.95</a></li>
        <li><a href="#">JuK 1.1</a></li>
        <li><a href="#">JuK 1.0</a></li>
      </ul>
    </li>
    <li><a href="#contactus">Contact Us</a></li>
  </ul>
</div>

【讨论】:

  • 非常感谢,但不幸的是,这似乎不起作用。
  • 您在我的回答中尝试过 sn-p 吗?它显然对我有用。 @UzairAhmed
  • @UzairAhmed 您需要知道单击指向不同页面的链接将导致 Javascript 放弃它正在执行的任何操作并立即加载该其他页面。这可能是您在案例中看不到结果的原因。
  • 我确实尝试过,是的,它可以在这里工作,但是当我在实际代码中尝试时却不行。活动类仍然是 about。
  • 链接指向同一页面上的标题。
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多