【问题标题】:Add 'active' class to same href as current clicked menu link将“活动”类添加到与当前单击的菜单链接相同的 href
【发布时间】:2025-12-13 18:05:01
【问题描述】:

我有这个菜单结构:

<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
 <li><a class="menu-link" href="#day">Day</a></li>
 <li><a class="menu-link" href="#night">Night</a></li>
 <li><a class="menu-link" href="#drinks">Joogid</a></li>
 <li><a class="menu-link" href="#takeaway">Takeaway</a></li>
</ul>

如果单击菜单中的相同href,我想将活动类添加到选项卡,即:

<ul class="nav nav-pills nav-fill" role="tablist">
         <li class="nav-item active">
             <a class="nav-link" data-toggle="tab" href="#day" role="tab">DAY</a>
         </li>
         <li class="nav-item">
             <a class="nav-link" data-toggle="tab" href="#night" role="tab">NIGHT</a>
         </li>
         <li class="nav-item">
           <a class="nav-link" data-toggle="tab" href="#drinks" role="tab">JOOGID<br></a>
         </li>
         <li class="nav-item">
           <a class="nav-link" data-toggle="tab" href="#takeaway" role="tab">takeaway</a>
         </li>
</ul>

我正在使用这段代码,但它似乎并不接近我想要实现的目标:

jQuery(function($) {
    var $anchors = $('.menu-link'),
    $items = $('.nav-link);

    $anchors.on('click', function() {
        var selectedIndex = $anchors.index(this);

        $anchors.removeClass('active').eq(selectedIndex).addClass('active');
        $items.removeClass('active').eq(selectedIndex).addClass('active');
    });
});

如何通过单击下拉菜单中的同一个 href 链接将活动类添加到选项卡并从所有其他选项卡中删除?

任何建议表示赞赏

【问题讨论】:

  • 你的代码似乎可以工作,但是你有一个类型错误$('.nav-link)它缺少'

标签: javascript jquery html twitter-bootstrap


【解决方案1】:

您可以使用点击触发器,它会执行默认行为(更改选项卡类,并使选项卡处于活动状态),因此您的代码应该是这样的:

jQuery(function($) {
    var $anchors = $('.menu-link'),
    $items = $('.nav-link');

    $anchors.on('click', function() {
        var selectedIndex = $(this).attr('href');
        $items.eq(selectedIndex).find('a').trigger('click');
    });
});

参见下面的 sn-p :

jQuery(function($) {
  var $anchors = $('.menu-link'),
      $items = $('.nav-item');

  $anchors.on('click', function() {
    var selectedIndex = $anchors.index(this);
    $items.eq(selectedIndex).find('a').trigger('click');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="dropdown">
  <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example
  <span class="caret"></span></button>
  <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
    <li><a class="menu-link" href="#day">Day</a></li>
    <li><a class="menu-link" href="#night">Night</a></li>
    <li><a class="menu-link" href="#drinks">Joogid</a></li>
    <li><a class="menu-link" href="#takeaway">Takeaway</a></li>
  </ul>
</div><br><br><br><br>
<ul class="nav nav-pills nav-fill" role="tablist">
  <li class="nav-item active">
    <a class="nav-link" data-toggle="tab" href="#day" role="tab">DAY</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#night" role="tab">NIGHT</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#drinks" role="tab">JOOGID<br></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#takeaway" role="tab">takeaway</a>
  </li>
</ul>
<div class="tab-content">
  <div id="day" class="tab-pane fade in active">
    <h3>Tab 1</h3>
    <p>Some content.</p>
  </div>
  <div id="night" class="tab-pane fade">
    <h3>Tab 2</h3>
    <p>Some content in menu 1.</p>
  </div>
  <div id="drinks" class="tab-pane fade">
    <h3>Tab 3</h3>
    <p>Some content in menu 2.</p>
  </div>
  <div id="takeaway" class="tab-pane fade">
    <h3>Tab 3</h3>
    <p>Some content in menu 2.</p>
  </div>
</div>

【讨论】:

  • 我的荣幸 :) .
  • 嗨,完全忘记了应该有活动类的选项卡面板。你有什么建议来相应地修改它吗? html 用于标签:
  • 嘿@user3615851 看看我改进的编辑答案,它也可以帮助你改变标签页:)
【解决方案2】:

您可以在您的 html 中使用“禁用”属性,并在点击事件时更改属性: (你需要jquery)

     <script>
     $('your eldmdnt name or id or class').attr('disabled','disabeld');
    </script>

使用禁用的 att,当不活跃时不使用 active 当想要不活跃时删除此 att 插入此 att(代码用于禁用)

希望它会起作用。让我知道

【讨论】:

    【解决方案3】:

    试试这个fiddle,它展示了如何将活动类添加到 jQuery UI 选项卡

    <div id="tabs">
    <ul>
        <li><a href="#tabs-1">Tab 1</a>
        </li>
        <li><a href="#tabs-2">Tab 2</a>
        </li>
        <li><a href="#tabs-3">Tab 3</a>
        </li>
    </ul>
    <div id="tabs-1">
        <p>Content for Tab 1</p>
    </div>
    <div id="tabs-2">
        <p>Content for Tab 2</p>
    </div>
    <div id="tabs-3">
        <p>Content for Tab 3</p>
    </div>
    

    你的 jQuery

    $("#tabs").tabs({
    activate: function (event, ui) {
        var active = $('#tabs').tabs('option', 'active');
        $("#tabid").html('the tab id is ' + $("#tabs ul>li a").eq(active).attr("href"));
    
    }});
    

    你的 CSS

    #tabs {
    width: 95%;
    margin-left: auto;
    margin-right: auto;
    margin-top: 10px;}
    

    【讨论】:

    • 问题是菜单和选项卡没有包裹在同一个div #tabs中。
    • this.parentElement().getAttribute('id');将其包裹在大括号内并在此行下方,使用 var active = $('#tabs').tabs('option', 'active');
    【解决方案4】:

    var $anchors = $('.menu-link'),
      $items = $('.nav-link');
    
    $anchors.on('click', function() {
      var href = $(this).attr("href");
    
      $anchors.removeClass('active');
      $items.parent().removeClass('active');
    
      $(this).addClass('active');
      $('.nav-link[href=' + href + ']').closest('li').addClass('active');
    
    });
    .active {
      color: red
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
      <li><a class="menu-link" href="#day">Day</a></li>
      <li><a class="menu-link" href="#night">Night</a></li>
      <li><a class="menu-link" href="#drinks">Joogid</a></li>
      <li><a class="menu-link" href="#takeaway">Takeaway</a></li>
    </ul>
    
    <ul class="nav nav-pills nav-fill" role="tablist">
      <li class="nav-item active">
        <a class="nav-link" data-toggle="tab" href="#day" role="tab">DAY</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="tab" href="#night" role="tab">NIGHT</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="tab" href="#drinks" role="tab">JOOGID<br></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-toggle="tab" href="#takeaway" role="tab">takeaway</a>
      </li>
    </ul>
    1. 获取点击href
    2. 使用属性选择来选择合适的href

    【讨论】:

      【解决方案5】:

      我认为这可能会起作用。

      jQuery(function($) {
          var $anchors = $('.menu-link'),
          $items = $('.nav-link');
      
          $anchors.on('click', function() {
              var href = $(this).attr('href');
      
              $('.nav').find('.nav-item').removeClass('active');
              $('.nav').find('.nav-item[href="'+href+'"]').addClass('active');
          });
      });
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签