2017-01-03 4 views
3

Ich versuche, nur eine untergeordnete div anzuzeigen, wenn der Text des übergeordneten div angezeigt wird, anstelle aller anderen divs mit demselben Namen. Stellen Sie sich vier Divs mit Klassen von "Lead" vor und innerhalb dieser Leads gibt es ein normales Div-Kind. Anstatt alle Childs in anderen Lead Divs zu öffnen, möchte ich nur das eine Kind in jedem Lead.Erweitern Nur die Child-Div in Parent

Beispiel HTML:

<div class="lead"><div class="normaldiv">1</div></div> 
<div class="lead"><div class="normaldiv">2</div></div> 
<div class="lead"><div class="normaldiv">3</div></div> 
<div class="lead"><div class="normaldiv">4</div></div> 

jQuery - erweitert dies alles normal divs

$(".lead").click(function() { 
    $(".normaldiv").slideToggle("slow"); 
}); 

Geprüft:

$(this).parent().children(".normaldiv").slideToggle("slow"); 

Die getestete man dachte ich würde alle greifen die Kinder wi verdünnen Sie das übergeordnete div und erweitern Sie diese nur auf einen Klick. Bei einem Klickereignis wird jedoch nichts angezeigt.

+0

Ist das zweite Beispiel in einem Click-Handler wie der erste eingeschlossen? –

+0

Warum nicht einfach versuchen, '$ (this) .children (". Normaldiv "). SlideToggle (" langsam ")'? –

Antwort

2

greifen nur die Kinder nicht die Eltern Kinder

$(".lead").click(function() { 
 
// $(".normaldiv").slideToggle("slow"); 
 
    $(this).children(".normaldiv").slideToggle("slow"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="lead"><div class="normaldiv">1</div></div> 
 
<div class="lead"><div class="normaldiv">2</div></div> 
 
<div class="lead"><div class="normaldiv">3</div></div> 
 
<div class="lead"><div class="normaldiv">4</div></div>

+1

Das ist was ich vermisst habe! Vielen Dank. – WhyAShortage

2

Verwenden $(this).find(".normaldiv") in Ihrem klicken Zuhörernur die normaldiv innerhalb des lead Element zu wählen - siehe Demo unter:

$(".lead").click(function() { 
 
    $(this).find(".normaldiv").slideToggle("slow"); 
 
});
<div class="lead"><div class="normaldiv">1</div></div> 
 
<div class="lead"><div class="normaldiv">2</div></div> 
 
<div class="lead"><div class="normaldiv">3</div></div> 
 
<div class="lead"><div class="normaldiv">4</div></div>

+1

Beat mich dazu und Ihre Antwort kann besser je nach OP Kontext – happymacarts

+1

als eine andere Anmerkung [dieser Beitrag] (http://stackoverflow.com/questions/648004/what-is-fastest-children-for-find-in- jquery) behauptet "finde" ist schneller als "children", also könntest du darüber nachdenken, diese Antwort über meine – happymacarts

+0

@happymacarts anzunehmen, das ist ein gültiger Punkt, da "normaldiv's * direct * Kinder sind ... – kukkuz

2

Sie müssen die Kinder der .lead Elemente auszuwählen, die Sie auswählen.

Was Sie derzeit im zweiten Beispiel tun, ist das übergeordnete des .lead Element Auswahl (einige Containerelement), und dann wählen .normaldiv aus seine Kinder versuchen (die nur .lead Elemente).

$(".lead").click(function() { 
 
    $(this).children(".normaldiv").slideToggle("slow"); 
 
});
.lead { 
 
    height: 20px; 
 
    width: 20px; 
 
    background-color: grey; 
 
    margin: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="lead"><div class="normaldiv">1</div></div> 
 
<div class="lead"><div class="normaldiv">2</div></div> 
 
<div class="lead"><div class="normaldiv">3</div></div> 
 
<div class="lead"><div class="normaldiv">4</div></div>

Hinweis: CSS hinzugefügt für eine bessere Sichtbarkeit.

Verwandte Themen