单击时使列表处于活动状态

make list active on click

您好,我对 javascript 一无所知,请帮助我在单击每个项目时将其激活。

$('.card > a').click(function(e){
  // find/remove all active classes from each a
  $('.mainNav > a').removeClass('active');

  // add active selected a
  $(this).addClass('active');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-4">
      <div class="card text-dark  mb-3"style="auto"  >
        <div class="card-header" style="background: #ffc221"  >  MENU </div>
        <ul class="list-group list-group-flush">
          <li class="list-group-item active"><a href="">  Math mcq</a></li>
          <li class="list-group-item"><a href="">  Urdu mcq</a></li>
          <li class="list-group-item"><a href="">  Stat mcq</a></li>
         
          
        </ul>
      </div>
    </div>

您似乎在使用 jQuery?只是检查一下,因为这也是我的答案。

$('.card > a').click(function(e){
  // find/remove all active classes from each a
  $('.mainNav > a').removeClass('active');

  // add active selected a
  $(this).addClass('active');
});

这看起来不错,但我在你的问题中没有看到 mainNav

> 是直接后代选择器,所以它试图找到直接在 mainNav 下的所有 a 元素,我认为将选择器更改为某些东西会更好喜欢:

$('ul.list-group li > a').removeClass('active');

完整示例:

$('ul.list-group li > a').click(function(e){

  e.preventDefault(); // added this line to prevent default click behaviour    

  // find/remove all active classes from each a
  $('ul.list-group li > a').removeClass('active');

  // add active selected a
  $(this).addClass('active');
});

这条线可能也会让你失望,如果没有看到 CSS 很难说,但我猜你 可能 需要添加 active li,不是 a 标签本身?

如果是这样,更改:

// add active selected a
$(this).addClass('active');

// add active selected li
$(this).parent().addClass('active');

如果 li 元素应该有活动的 class,那么这一行也需要更改:

// find/remove all active classes from each
$('ul.list-group li').removeClass('active');

问题是您的 a 标签不是具有 card class 的元素的 children,因此 .card > a 的选择器是不正确的,因为它只影响作为 activeclass 元素的 children(而不是后代)的锚点。 > 表示“child”。您可以使用 space,这意味着后代。然而,最好将 li 元素而不是 a 元素作为目标,以使它们处于活动状态,因为这样您就可以使用开箱即用的 siblings 来删除 active class。如果您不需要从其他元素中删除 active class,那么您可以简单地删除调用 siblings().

的行

$('.card li').click(function(e){
  // find/remove all active classes from each a
  $('.mainNav > a').removeClass('active');

  // add active selected a
  $(this).addClass('active').siblings().removeClass("active");
  e.preventDefault();
});
.active {
    background-color: lightgreen;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-4">
      <div class="card text-dark  mb-3"style="auto"  >
        <div class="card-header" style="background: #ffc221"  >  MENU </div>
        <ul class="list-group list-group-flush">
          <li class="list-group-item active"><a href="">  Math mcq</a></li>
          <li class="list-group-item"><a href="">  Urdu mcq</a></li>
          <li class="list-group-item"><a href="">  Stat mcq</a></li>
         
          
        </ul>
      </div>
    </div>