javascript - Hvordan finne en forelder med en kjent klasse i jQuery?
Jeg har en <div> som har mange andre <div>er inni seg, hver på et forskjellig nivå av innlemming. I stedet for å gi hvert barn <div> en identifikator, foretrekker jeg å bare gi rot-<div>en identifikatoren. Her er et eksempel:
<div class="a" id="a5">
<div class="b">
<div class="c">
<a class="d">
</a>
</div>
</div>
</div>
Hvis jeg skriver en funksjon i jQuery for å reagere på klassen d og jeg vil finne ID-en til dens forelder, klassen a, hvordan ville jeg gjøre dette?
Jeg kan ikke bare gjøre $ ('.a').attr('id');, fordi det er flere klasser a. Jeg kunne finne forelderens foreldres foreldres ID, men det virker som dårlig design, langsomt og ikke veldig polymorft (jeg måtte skrive ulik kode for å finne ID-en for klasse c).
Svar #1
Forutsatt at this er .d, kan du skrive
$(this).closest('.a');
Metoden closest returnerer den innerste forelderen til elementet ditt som samsvarer med velgeren.
Svar #2
Send en selektor til jQuery parents-funksjonen:
d.parents('.a').attr('id')
REDIGER Hmm, faktisk er Slaks sitt svar overlegent hvis du bare vil ha den nærmeste forfaderen som matcher din velger.
Svar #3
Utdraget fra kommentarene til @Resord ovenfor. Denne fungerte for meg og var mer i samsvar med spørsmålet.
$(this).parent().closest('.a');
Takk
Svar #4
Du kan bruke parents() for å hente alle foreldre med den gitte selektoren.
Beskrivelse: Hent forfedrene til hvert element i det gjeldende settet med samsvarende elementer, valgfritt filtrert etter en velger.
Men parent() vil bare hente den første forelderen til elementet.
Beskrivelse: Hent forelderen til hvert element i det gjeldende settet av matchende elementer, valgfritt filtrert etter en selektor.
jQuery parent() vs. parents()
Og det finnes .parentsUntil() som jeg tror vil være best.
Beskrivelse: Hent forfedrene til hvert element i det nåværende settet av samsvarende elementer, opp til men ikke inkludert elementet som samsvarer med velgeren.
Svar #5
<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>
I min situasjon bruker jeg denne koden:
$(this).parent().closest('.date').attr('id')
Håper dette hjelper noen.
