wake-up-neo.com

Wie finde ich ein Elternteil mit einer bekannten Klasse in jQuery?

Ich habe einen <div>, Der viele andere <div> Enthält, jede auf einer anderen Verschachtelungsebene. Anstatt jedem Kind <div> Einen Bezeichner zu geben, gebe ich einfach den Root <div> Den Bezeichner. Hier ist ein Beispiel:

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

Wenn ich in jQuery eine Funktion schreibe, die auf die Klasse d antwortet, und die ID für die übergeordnete Klasse a suchen möchte, wie soll ich das tun?

Ich kann $('.a').attr('id'); nicht einfach ausführen, da es mehrere Klassen as gibt. Ich konnte die ID des Elternteils des Elternteils finden, aber das scheint schlecht, langsam und nicht sehr polymorph zu sein (ich müsste einen anderen Code schreiben, um die ID für die Klasse c zu finden).

209
John Smith

Angenommen, this ist .d, Du kannst schreiben

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

Die closest -Methode gibt das innerste übergeordnete Element Ihres Elements zurück, das dem Selektor entspricht.

422
SLaks

Übergeben Sie einen Selektor an die Funktion jQuery Eltern :

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

[~ # ~] edit [~ # ~] Hmm, eigentlich ist Slaks Antwort überlegen, wenn Sie nur den nächsten Vorfahren haben möchten, der zu Ihrer Auswahl passt.

21
Drew Noakes

Sie können parent () verwenden, um alle Eltern mit dem angegebenen Selektor abzurufen.

Beschreibung: Abrufen der Vorfahren der einzelnen Elemente in der aktuellen Gruppe übereinstimmender Elemente, optional gefiltert durch einen Selektor.

Aber parent () liefert nur das erste übergeordnete Element des Elements.

Beschreibung: Ruft das übergeordnete Element jedes Elements in der aktuellen Gruppe übereinstimmender Elemente ab, optional gefiltert durch einen Selektor.

jQuery parent () vs. parents ()

Und es gibt . ParentsUntil () , von dem ich denke, dass es das Beste ist.

Beschreibung: Ruft die Vorfahren der einzelnen Elemente in der aktuellen Gruppe übereinstimmender Elemente ab, wobei das vom Selektor übereinstimmende Element nicht berücksichtigt wird.

6
Amr Elgarhy

Verwenden Sie .parentsUntil ()

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