【问题标题】:If child has an active class, add class to before anchor tag如果孩子有一个活动班级,请在锚标记之前添加班级
【发布时间】:2021-01-29 16:45:23
【问题描述】:

我有一个列表,其中包含带有标题锚标记的子菜单。如果下拉菜单 li 有一个活动类,我只需要将类添加到其标题锚标记。请看一下这个截图。

我通过向锚标记添加唯一类并找到它并添加类来轻松做到这一点。但是,如果我有更多带有标题标签的子菜单怎么办?然后我必须一次又一次地重复我的 jQuery 脚本。

所以我尝试了这种方式。

  $(document).ready(function () {
    if (jQuery(".dropdown li").hasClass("active")) {
        $(this).closest("a").addClass("main-link");.
    }
  });

但它不起作用。有没有办法做到这一点?

这里是fiddle

【问题讨论】:

  • $(this) 不是 li 节点。您可能想要$('.dropdown li').closest... 编辑:再想一想,您还想遍历每个$('.dropdown li'),然后检查循环内的条件。或者只选择最开始的活动节点:` $('.dropdown li.active').closest('li').find('a').first().addClass('main-link'); `
  • 近看父母,主播不是父母。
  • How do I ask a good question?: "请勿发布代码、数据、错误消息等的图片 - 复制或在问题中输入文本。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。”

标签: javascript html jquery


【解决方案1】:

.closest() 查找与选择器匹配的最接近的包含元素。 a 不是下拉菜单的容器,它是下拉菜单 before 的元素。为此,您需要使用.prev()

您也不应该使用ifthisif 不会将 this 绑定到条件成功的元素。只需使用选择器和 DOM 导航即可。

$(document).ready(function() {
  $(".dropdown:contains(li.active)").prev("a").addClass("main-link");
});

【讨论】:

    【解决方案2】:

    近看父母,主播不是父母。有很多方法可以在树上行走

    $("li.active").parent().closest("li").find(">a").addClass("foo");
    
    $("li:has(> ul > li.active)").find(">a").addClass("bar");
    .foo { background-color: yellow; }
    .bar { color: red; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <ul>
      <li>
        <a>A</a>
        <ul>
          <li class="active">X</li>
        </ul>
      </li>
    </ul>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2023-03-23
      • 2016-06-06
      • 2022-01-21
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多