代码之家  ›  专栏  ›  技术社区  ›  Haradzieniec

jquery:使用closest()、find()和children()获取特殊父级的同级

  •  0
  • Haradzieniec  · 技术社区  · 6 年前

    我遇到了一个问题:如何找到using.closest、.find的url,以及jquery的其他方法。页面结构为:

    ul
     ul
      ul.good
        li
        ...
        li
        li
          <a href="/findme">findme</a>
          ul
            .
             .
              .
              ul
               li
                 a <-this
    

    正如你所见,有很多内部列表。 我需要找到ul.good的li的a的ref值。问题是,如果我使用closest()找到ul.good,则无法找到作为 我从那里“来”到UL.GOOD。

    所以,问题是如何从a<中获取/findme值。有可能吗?

    为了澄清,a ref/findme是ul.good中的一级。

    A<-这要深得多(水平未知)。

    谢谢您。

    2 回复  |  直到 6 年前
        1
  •  1
  •   raina77ow    6 年前

    一种可能的方法是收集所有 li -儿童 ul.good 第一:

    $goodUl = $this.closest('ul.good');
    $lis = $goodUl.children();
    

    …那就把它们当作 closest 帕拉姆:

    $liParentOfThis = $this.closest($lis);
    

    这会让你成为父母 $li ,然后查找 a 应该是微不足道的:

    $a = $liParentOfThis.children('a');
    

    这有点简明扼要,但效率不高,因为你上了两次链。你可以通过循环来加快速度:

    $check = $this; 
    while (($check = $check.parent().closest('ul')).length) {
      if ($check.is('.good')) break; // already went up too far
      $a = $check.prev('a');
      if ($a.length) break; // found it 
    }
    

    在每一步中,你都需要下一个最接近的ul(父级是必要的,因为 .closest 查找从元素本身开始)并检查它是否具有 你需要。如果是,搜索就完成了。

        2
  •  0
  •   Pallavi Dwivedi    6 年前

    这里有一个简单的解决方案。希望这对你有用:)

    $("#here").on("click",function(){
       alert($(this).parents("ul.good").find("> li > a").attr("href"));
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul>
      <ul>
        <ul class="good">
          <li>something</li>
          <li>something</li>
          <li>
            <a href="/findme">findme</a>
          </li>
        <ul>
        <ul>
          <li>
            <a href="#" id="here">I am here</a>
          </li>
          </ul>
          </ul>
        </ul>
      </ul>
    </ul>