如何在jQuery中找到具有已知类的父级?

Joh*_*ith 219 html javascript jquery dom parent

我有一个<div>其他的<div>s,每个都在不同的嵌套级别.<div>我不是给每个孩子一个标识符,而是给根<div>标识符.这是一个例子:

<div class="a" id="a5">
  <div class="b">
    <div class="c">
      <a class="d">
      </a>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我在jQuery中编写一个函数来响应类d,我想找到它的父类的类a,我该怎么做呢?

我不能简单地做$('.a').attr('id');,因为有多个类a.我可以找到它的父母的父母的父亲的ID,但这似乎设计很差,速度慢,而且不是非常多态(我必须编写不同的代码来找到类的ID c).

SLa*_*aks 443

假设this.d,你可以写

$(this).closest('.a');
Run Code Online (Sandbox Code Playgroud)

closest方法返回与选择器匹配的元素的最内层父级.

  • 请注意,几乎没有捕获:如果您的起始元素也匹配查询,则不会获得父元素,而是获取相同的元素.这可能是也可能不是想要的行为.如果没有,我推荐这个:$(this).parent().nearest('.a'); (42认同)
  • 很有帮助。我总是习惯做 $(this).parent().parent().parent() 并且我知道有更好的解决方案。 (2认同)

Dre*_*kes 22

将选择器传递给jQuery 函数:

d.parents('.a').attr('id')
Run Code Online (Sandbox Code Playgroud)

编辑嗯,如果你只想要最接近你的选择器的祖先,那么Slaks的答案是优越的.


Huy*_*Huy 10

<div id="412412412" class="input-group date">
     <div class="input-group-prepend">
          <button class="btn btn-danger" type="button">Button Click</button>
          <input type="text" class="form-control" value="">
      </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我使用以下代码:

$(this).parent().closest('.date').attr('id')
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。


Amr*_*rhy 8

您可以使用parents()来获取具有给定选择器的所有父母。

描述:获取当前匹配元素集中每个元素的祖先,可以选择使用选择器进行过滤。

但是parent()只会获得元素的第一个父元素。

描述:获取当前匹配元素集中每个元素的父元素,可以选择通过选择器进行过滤。

jQuery parent()与父母()

而且有.parentsUntil() ,我认为将是最好的。

描述:获取当前匹配元素集中每个元素的祖先,直到但不包括选择器匹配的元素。


Anj*_*lva 5

摘自上面@Resord 的评论。这个对我有用,并且更倾向于这个问题。

$(this).parent().closest('.a');
Run Code Online (Sandbox Code Playgroud)

谢谢