我有一个<div>,其中有许多其他<div>,每个在不同的嵌套级别。我不给每个子节点<div>一个标识符,而是给根节点<div>一个标识符。这里有一个例子:

<div class="a" id="a5">
  <div class="b">
    <div class="c">
      <a class="d">
      </a>
    </div>
  </div>
</div>

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

我不能简单地执行$('.a').attr('id');,因为有多个类为。我可以找到它的父母的父母的父母的ID,但这似乎是一个糟糕的设计,缓慢,并不是很多态(我将不得不编写不同的代码来查找类c的ID)。


当前回答

用parentsUntil()。

$(".d").parentsUntil(".a");

其他回答

摘自@Resord的评论。这个方法对我很有用,而且更贴近这个问题。

$(this).parent().closest('.a');

谢谢

向jQuery父函数传递一个选择器:

d.parents('.a').attr('id')

编辑嗯,实际上Slaks的答案是优越的,如果你只想要最接近的祖先匹配你的选择器。

假设这是。d,你可以这样写

$(this).closest('.a');

最近的方法返回与选择器匹配的元素的最里面的父元素。

<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>

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

$(this).parent().closest('.date').attr('id')

希望这能帮助到一些人。

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

描述:获取每个祖先 元素在当前匹配集中的 元素,可选地由 选择器。

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

描述:获取每个节点的父节点 元素在当前匹配集中的 元素,可选地由 选择器。

jQuery parent() vs. parents()

还有. parentsuntil(),我认为它是最好的。

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