How to find a parent with a known class in jQuery?

JavascriptJqueryHtmlDomParent

Javascript Problem Overview


I have a <div> that has many other <div>s within it, each at a different nesting level. Rather than give every child <div> an identifier, I rather just give the root <div> the identifier. Here’s an example:

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

If I write a function in jQuery to respond to class d and I want to find the ID for its parent, class a, how would I do this?

I cannot simply do $('.a').attr('id');, because there are multiple class as. I could find its parent’s parent’s parent’s ID but that seems of poor design, slow, and not very polymorphic (I would have to write different code for finding the ID for class c).

Javascript Solutions


Solution 1 - Javascript

Assuming that this is .d, you can write

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

The closest method returns the innermost parent of your element that matches the selector.

Solution 2 - Javascript

Pass a selector to the jQuery parents function:

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

EDIT Hmm, actually Slaks's answer is superior if you only want the closest ancestor that matches your selector.

Solution 3 - Javascript

You can use parents() to get all parents with the given selector.

> Description: Get the ancestors of each > element in the current set of matched > elements, optionally filtered by a > selector.

But parent() will get just the first parent of the element.

> Description: Get the parent of each > element in the current set of matched > elements, optionally filtered by a > selector.

jQuery parent() vs. parents()

And there is .parentsUntil() which I think will be the best.

> Description: Get the ancestors of each > element in the current set of matched > elements, up to but not including the > element matched by the selector.

Solution 4 - Javascript

Extracted from @Resord's comments above. This one worked for me and more closely inclined with the question.

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

Thanks

Solution 5 - Javascript

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

In my situation, i use this code:

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

Hope this help someone.

Solution 6 - Javascript

Use .parentsUntil()

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohn SmithView Question on Stackoverflow
Solution 1 - JavascriptSLaksView Answer on Stackoverflow
Solution 2 - JavascriptDrew NoakesView Answer on Stackoverflow
Solution 3 - JavascriptAmr ElgarhyView Answer on Stackoverflow
Solution 4 - JavascriptAnjana SilvaView Answer on Stackoverflow
Solution 5 - JavascriptHuyView Answer on Stackoverflow
Solution 6 - Javascriptjai3232View Answer on Stackoverflow