2016-05-23 6 views
-1

Ich versuche, eine div # Kontrollen auf Vollbild, wenn eine Taste im Inneren angeklickt wird und macht alle andere div # Kontrollen mit gleich Eltern, div # Tasten, verschwinden .Geschwister der Eltern außer Elemente verschwinden geklickt in jQuery

Mein HTML:

  <div id="testpile" class="inner cover"> 
       <div id="buttons" class="buttons"> 
        <div id="controls" class="col-md-4 rat"> 
         <h1>Rationelt</h1> 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
         <a id="1" class="btn btn-group btn-default" role="button">Rationelt</a> 
        </div> 
        <div id="controls" class="col-md-4 emo"> 
         <h1>Emotionelt</h1> 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
         <a id="2" class="btn btn-group btn-default" role="button">Emotionelt</a> 
        </div> 
        <div id="controls" class="col-md-4 per"> 
         <h1>Personligt</h1> 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
         <a id="3" class="btn btn-group btn-default" role="button">Personligt</a> 
        </div> 
       </div> 
      </div> 

Meine jQuery:

<script type="text/javascript"> 
    $('.btn-group').on('click', function() { 
     $(this).parent().toggleClass('col-md-4 col-md-12'); 
     $(this).parent().siblings().toggleClass('col-md-4 col-md-0'); 
    }); 
</script> 

Ich bin ziemlich sicher, dass das Problem, das ich habe ist, dass ich nicht bei der Ausrichtung das Recht div gelungen, aber ich habe alles versucht, um es selbst zu lösen und leider nicht in der lage.

+0

Duplizieren ID ist ungültiges HTML. Auf diese Weise seit 1999 specs und ist immer noch https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute. Es könnte manchmal funktionieren, aber unvorhersehbare Ergebnisse werden auftreten, die schwer zu debuggen sein werden. –

+0

Vielen Dank für die Erinnerung, es ist ein dummer Fehler zu machen und ich bin froh, dass ich das in meinem Kopf und außerhalb meines Skripts habe. – user2304993

Antwort

0

Ich glaube nicht, dass Sie etwas zu den Geschwistern des Elternteils tun, außer ihnen nur eine Spaltenklasse zu geben. Von was ich verstehe, was Sie hinzufügen müssen, ist .hide() Methode. Dadurch werden die divs ausgeblendet, die Sie ausblenden möchten. Hier

ist eine Verbindung von der jquery api, die Ihnen helfen und geben Beispiele link

0

entfernen, dass id controls. IDs sollten nicht wiederholt werden, verwenden Sie dort Klasse wie;

<div class="controls col-md-4 rat"> 

und verwenden Sie JS wie;

$('.btn-group').on('click', function() { 
    $(".controls").hide(); 
    $(this).parents(".controls").show(); 
}); 
1

Als Neben der Steuer ID kopiert, einfach die Anzeige der Eltern Geschwister wechseln sie zu Einblenden/Ausblenden auf jede Taste klicken: Targeting

$('.btn-group').on('click', function() { 
    $(this).parent().siblings().toggle(); 
}); 
+0

Ich muss sagen, dass ich den anderen Code funktionierte, etwas in der Art: fiddle.jshell.net/274NN/5 Ich habe gerade versucht, es aufzuräumen, damit ich es nicht für jede Taste kopieren muss. Ist es eine dumme Idee, es so zu machen? Danke auch für Ihre Zeit. Außerdem habe ich die duplizierten IDs entfernt, danke. – user2304993

1

Sie das Recht div trotz die ungültigen doppelten IDs. Die Verwendung von toggleClass ist das Problem, vor allem nach dem ersten Klick, da es jede Klasse aus dem aktuellen Zustand schaltet, die inkonsistente Ergebnisse abhängig von der Reihenfolge der Benutzer auf jedes Element klickt - Sie scheinen auch Raster zu schalten Spaltendeklarationen, von denen ich nicht sicher bin, was Sie vorhaben?

Unten habe ich den Code geändert addClass und removeClass explizit zu verwenden (und gemacht haben ‚versteckte‘ noch leicht sichtbar, so dass Sie die Wirkung der nachfolgenden Klicks sehen)

$('.btn-group').on('click', function() { 
 
     $(this).parent().removeClass('hidden'); 
 
     $(this).parent().siblings().addClass('hidden'); 
 

 
    });
.hidden {opacity:0.1}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="testpile" class="inner cover"> 
 
       <div id="buttons" class="buttons"> 
 
        <div id="controls" class="col-md-4 rat"> 
 
         <h1>Rationelt</h1> 
 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
 
         <a id="1" class="btn btn-group btn-default" role="button">Rationelt</a> 
 
        </div> 
 
        <div id="controls" class="col-md-4 emo"> 
 
         <h1>Emotionelt</h1> 
 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
 
         <a id="2" class="btn btn-group btn-default" role="button">Emotionelt</a> 
 
        </div> 
 
        <div id="controls" class="col-md-4 per"> 
 
         <h1>Personligt</h1> 
 
         <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> 
 
         <a id="3" class="btn btn-group btn-default" role="button">Personligt</a> 
 
        </div> 
 
       </div> 
 
      </div>

+0

Ich sah die "andere Klassen" Problem auch, die OP muss wahrscheinlich die Länge der "hdden/nicht versteckt" erkennen, um die entsprechende Klasse (nicht Teil der Frage obwohl) schöne Weise, um den Effekt BTW zu zeigen. –

+0

Ah, ich habe schon lange keinen Code mehr geschrieben, ich habe vergessen, dass ich IDs nicht mehr als einmal benutzen kann, danke, dass du mich daran erinnert hast. Aber ich muss sagen, dass ich den anderen Code funktionierte, etwa so: http://fiddle.jshell.net/274NN/5/ Ich habe gerade versucht, es aufzuräumen, also würde ich es nicht kopieren müssen 1 Zeit für jede Taste. Ist es eine dumme Idee, es so zu machen? Danke auch für Ihre Zeit. – user2304993

+0

Das Umschalten von Klassen wie in Ihrer Fiddle funktioniert gut für 2 Elemente, aber mit mehr als zwei würde der Umschaltstatus nicht immer dem entsprechen, was Sie benötigen (wenn der Benutzer auf A klickt, B und C ausschaltet und dann auf C klickt, Das wird am Ende A ausschalten, aber B wieder einschalten). Sie haben auch auf explizite IDs innerhalb der Funktion umgestellt, bei denen Code für mehr als eine Schaltfläche kopiert werden muss. so wie du es ursprünglich hattest ('$ (this) .parent) ...') ist besser, denke ich. –