【问题标题】:atleast one active class when dynamic tabs are removed inside div当在 div 中删除动态选项卡时,至少有一个活动类
【发布时间】:2026-02-06 09:40:02
【问题描述】:

我会尽量具体。我有一个导航栏,可以动态添加选项卡,单击附加选项卡后,也可以通过单击关闭按钮删除这些附加选项卡。这是HTML:

<ul id="nav-tabs" data-tabs="tabs" >
 <li id="test"  class="active">
  <a href="#home" data-toggle="tabs" >
   <img src="assets/img/button_home_selected3.png" class="hover" width="83" />
    <span>Home<button type="button" class="close">&times;</button></span>
  </a>
 </li>
</ul>

li 标签是动态添加和删除的,li 标签中的活动类显示不同的图像,使标签可区分,因此活动类在 li 标签之间切换。

要关闭标签,脚本是:

$('.close').click(function(e) {
 e.preventDefault();
 var panelId = $(this).closest("li").remove().attr("aria-controls");
 $("#tab" + panelId).remove();
});

即使用户删除了活动选项卡,我也只想要一个活动选项卡。目前,当我关闭活动选项卡时,没有活动类,使选项卡相似。

【问题讨论】:

  • 请贴一些代码可能是你关闭它的方式
  • 贴出结束代码,这样我们就可以插手了。 :)
  • 好的,我已经发布了关闭标签的脚本
  • @Hunain 知道了。检查它是否有效。 :)

标签: javascript jquery html css


【解决方案1】:

当您关闭选项卡时,获取选项卡的索引。如果是最后一个,则将活动类添加到最后一个选项卡,如果是第一个,则首先,如果在中间的某个位置,则从关闭的选项卡的左侧或右侧取一个。

$(".close").on("click", function() {
      var elem = $(this).closest("li");

      if (elem.hasClass("active")) {
          var idx = elem.index(),
              remainingTabs = $("li");

          if (idx <= remainingTabs.length) {
              $(remainingTabs.get(idx - 1)).addClass("active");
          } else if (idx == 0) {
              $(remainingTabs.get(0)).addClass("active");
          }
      }

      // remove current tab
      $(".close", elem).unbind();
      elem.remove();
}

【讨论】:

  • 这只是删除按钮标签而不是包含所有内容的整个 li 标签
  • 与下面提到的问题相同。您的脚本正在运行,但我必须将鼠标悬停在 li 标记上才能使其可见,尽管它在调试器中显示为活动状态....
  • 那么你的问题出在 css 上
  • 谁能解决这个问题*.com/questions/14907997/…
【解决方案2】:

你可以试试这个:

$('.close').click(function(e) {
    e.preventDefault();
    var panelId = $(this).closest("li").remove().attr("aria-controls");
    $("#tab" + panelId).remove();
    $("#nav-tabs").children("li").last().addClass("active");
});

如果您希望第一个选项卡处于活动状态,请将 .last() 替换为 .first()。 :)

【讨论】:

  • 除非我单击中间或所有标签,否则您的代码工作正常,我必须将鼠标悬停在选项卡上才能使其可见,尽管调试器显示存在活动类:p
  • 我不明白你。这是怎么回事?
  • 您的脚本正在运行,但我必须将鼠标悬停在 li 标签上才能使其可见,因为它在调试器中显示为活动状态...
最近更新 更多