• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Tabelle mit Toggle erstellen

Earlenrico

Neues Mitglied
Hallo zusammen, ich möchte hier ein neues Thread aufmachen.

Der Grundgedanke entstand vor ca. 3 Jahren. URL: https://www.html.de/threads/div-container-mit-tabelle-und-toggle.60896/

Ich möchte eine Tabelle erstellen von CD‘s.

Ich möchte, dass in der Tabelle stehen:

Name der / des Albums

CD 1 eventl. CD 2

Titel und Länge des Titels

Was nicht das Problem ist.

Mein Problem ist, ich möchte,

Schritt: Klick auf das Album. CD 1 eventuell CD 2 sich öffnet.
Schritt: Klick auf CD 1, die Musiktitel erscheinen. Das ganze für eventuell CD 2.

Dann das ganze wieder schließen.

Schritt: Klick auf CD 1, die Musiktitel verschwinden.
Schritt: Klick auf das Album, CD 1 eventuell CD 2 verschwinden.

Ich hänge hier einen Code von damals an, der teilweise auch funktioniert. Ich hätte diesen Code aber am liebsten ohne Javascript, sondern nur in CSS. Wenn es einfacher ist, mit Javascript.

Code:
    Gestern um 11:14

    Lesezeichen hinzufügen
    #5

Man sollte es nicht zu umständlich machen...

Code:

<!DOCTYPE HTML>
<html lang=de>
  <meta charset=utf-8>
  <title>my CD</title>
  <link rel=stylesheet href=https://unpkg.com/@picocss/pico@latest/css/pico.min.css>
  <script src=https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js></script>
  <style>
    th {
        font-weight: bold;
        color: red;
    }
    tbody tr:first-child th:first-child{
        cursor:pointer;
    }
  </style>
  <script>
    $(document).ready( () =>
        $( "tbody tr:first-child th:first-child" )
          .click( el  =>
            $(el.target)
             .closest('tbody').find('tr:first-child~tr').toggle()
        )
    )
  </script>
<body class=container>
  <table>
    <thead>
      <tr>
        <th>Lfd. Nr
        <th colspan="3">Name der CD
        <tr>
        <th>01
        <th colspan="3">100 Rock Hits - The Sound of my Life
    <tbody>
      <tr>
        <th>cd1<th>Interpret<th>Titel<th>Zeit
      <tr>
        <td>01.<td>Golden Earring
        <td>Radar Love<td>05:05
      <tr>
        <td>02.<td>Heart
        <td>Barracuda<td>04:24
      <tr>
        <td>03.<td>Judas Priest
        <td>Living After Midnight<td>03:31
      <tr>
        <td>04.<td>Alice Cooper
        <td>No More Mr. Nice Guy<td>03:07
    <tbody>
      <tr>
        <th>cd2<th>Interpret<th>Titel<th>Zeit
      <tr>
        <td>01.</td><td>Golden Earring
        <td>Radar Love<td>05:05
      <tr>
        <td>02.<td>Heart
        <td>Barracuda<td>04:24
      <tr>
        <td>03.<td>Judas Priest
        <td>Living After Midnight<td>03:31
      <tr>
        <td>04.<td>Alice Cooper
        <td>No More Mr. Nice Guy<td>03:07
        <tr>
    <tbody>
        <th>02.
        <th colspan="3">Andrea Bocelli - Cieli Di Toscana</th>
        <tr>
        <td>01.</td>
        <td>Andrea Bocelli</td>  
        <td>Chiara</td>  
        <td>04:04</td>


  </table>

Ich habe mir ein HTML-Gerüst gebaut, um darauf aufbauen zu können.

HTML:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>musik</title>
</head>

<body>
   
    <table border="1">
                <thead>
                    <tr>
                        <th>Lfd. Nr.</th>
                        <th colspan="3">Name der CD</th>
                    </tr>
                </thead>
                <tbody>  
                    <tr>
                        <th>01.</th>
                        <th colspan="3">100 Rock Hits - The Sound of my Life</th>
                    </tr>
                   
                    <tr>
                        <th>CD_01</th>
                        <th>Interpret</th>
                        <th>Titel</th>
                        <th>Zeit</th>
                    </tr>
                    <tr>
                        <td>01.</td>  
                        <td>Golden Earring</td>  
                        <td>Radar Love</td>  
                        <td>05:05</td>
                    </tr>
                    <tr>
                        <td>02.</td>
                        <td>Heart</td>
                        <td>Barracuda</td>
                        <td>04:24</td>
                    </tr>
                    <tr>
                        <td>03.</td>
                        <td>Judas Priest</td>
                        <td>Living After Midnight</td>
                        <td>03:31</td>
                    </tr>
                    <tr>
                        <td>04.</td>
                        <td>Alice Cooper</td>
                        <td>No More Mr. Nice Guy</td>
                        <td>03:07</td>
                    </tr>
                    <tr>
                        <th>CD_02</th>
                        <th>Interpret</th>
                        <th>Titel</th>
                        <th>Zeit</th>
                    </tr>
                    <tr>
                        <td>01.</td>
                        <td>Golden Earring</td>
                        <td>Radar Love</td>
                        <td>05:05</td>
                    </tr>
                    <tr>
                        <td>02.</td>
                        <td>Heart</td>
                        <td>Barracuda</td>
                        <td>04:24</td>
                    </tr>
                    <tr>
                        <th>02.</th>
                        <th colspan="3">Andrea Bocelli - Cieli Di Toscana</th>
                    </tr>
                    <tr>
                        <th>CD_01</th>
                        <th>Interpret</th>
                        <th>Titel</th>
                        <th>Zeit</th>
                    </tr>
                    <tr>
                        <td>01.</td>
                        <td>Andrea Bocelli</td>  
                        <td>Chiara</td>  
                        <td>04:04</td>
                    </tr>
                </tbody>
   
    </table>
   
</body>
</html>
Vielen Dank für eure Hilfe bzw. Vorschläge. Mit freundlichen Grüßen Enrico
 
Zuletzt bearbeitet:
@Sempervivum der untenstehende Code den habe ich von dir, denn hattest du mal in dem Thread mit einbracht. Dieser funktioniert soweit. Danke Dir erstmal dafür. :smile: Kannst du mir trotzdem helfen?
Es funktioniert das jeweiligen ein-und ausklappen der CD‘s.

Wie funktioniert das komplette ein-und ausklappen, wenn man auf das jeweilige Album klickt. Das zum Schluss nur noch die Alben da stehen? Vielen Dank im Voraus. Liebe Grüße Enrico

Code:
<!DOCTYPE html>
<html="de">
<head>
<meta charset="utf-8">
<title>untitled</title>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
  /* $(document).ready(function() {  
                      
      $(".copen").click(function() {
  
         $(".c").show();
 
         var cid = $(this).data("c");
         $("#"+cid).toggle();   
  
      });
  
   });*/
     
     
        $(document).ready(function () {
            $(".copen").click(function () {
                var cid = $(this).data("c");
              //$('[data-cd-id]').hide ();
                $('[data-cd-id="' + cid + '"]').toggle ();
            });
        });
</script>
<style>
    tr [data-cd-id]{
        display: none;
    }
</style>
</head>
<body>
    
    <table border="1">
        <thead>
            <tr>
                <th>Lft Nr</th>
                <th colspan="3">Name der CD</th>
            </tr>
        </thead>    
            <tr>
                <th>01</th>
                <th colspan="3">100 Rock Hits - The Sound of my Life</th>
            </tr>
        <tbody>
            <tr>
                <td class="copen" data-c="c1">CD_01</td>
                <td>Interpret</td>
                <td>Titel</td>
                <td>Zeit</td>
            </tr>
            <tr data-cd-id="c1" class="c">
                <td>01.</td>
                <td>Golden Earring</td>
                <td>Radar Love</td>
                <td>05:05</td>
            </tr>
            <tr data-cd-id="c1">
                <td>02.</td>
                <td>Heart</td>
                <td>Barracuda</td>
                <td>04:24</td>
            </tr>
            <tr data-cd-id="c1">
                <td>03.</td>
                <td>Judas Priest</td>
                <td>Living After Midnight</td>
                <td>03:31</td>
            </tr>
                
            <tr data-cd-id="c1">
                <td>04.</td>
                <td>Alice Cooper</td>
                <td>No More Mr. Nice Guy</td>
                <td>03:07</td>
            </tr>
            <tr data-cd-id="c1">
                <td>05.</td>
                <td>Scorpions</td>
                <td>Rock You Like A Hurricane</td>
                <td>04:16</td>
            </tr>
            <tr data-cd-id="c1">
                <td>06.</td>
                <td>P!nk</td>
                <td>Trouble</td>
                <td>03:13</td>
            </tr>
            <tr data-cd-id="c1">
                <td>07.</td>
                <td>Motorhead</td>
                <td>Hellraiser</td>
                <td>04:34</td>
            </tr>
            <tr data-cd-id="c1">
                <td>08.</td>
                <td>Starship</td>
                <td>We Built This City</td>
                <td>04:37</td>
            </tr>
            <tr data-cd-id="c1">
                <td>09.</td>
                <td>Ram Jam</td>
                <td>Black Betty</td>
                <td>03:58</td>
            </tr>
            <tr data-cd-id="c1">
                <td>10.</td>
                <td>The Sweet</td>
                <td>Blockbuster</td>
                <td>03:12</td>
            </tr>
            <tr data-cd-id="c1">
                <td>11.</td>    
                <td>Blue Oyster Cult</td>    
                <td>(Don't Fear) The Reaper</td>
                <td>05:08</td>
            </tr>
            <tr data-cd-id="c1">    
                <td>12.</td>    
                <td>Uriah Heep</td>    
                <td>Easy Livin'</td>    
                <td>02:36</td>
            </tr>
            <tr data-cd-id="c1">
                <td>13.</td>    
                <td>Foreigner</td>
                <td>Urgent</td>    
                <td>03:58</td>
            </tr>
            <tr data-cd-id="c1">
                <td>14.</td>
                <td>Journey</td>
                <td>Wheel In The Sky</td>
                <td>04:12</td>
            </tr>
            <tr data-cd-id="c1">
                <td>15.</td>    
                <td>Kenny Loggins</td>    
                <td>Heartlight</td>    
                <td>03:55</td>
            </tr>
            <tr data-cd-id="c1">
                <td>16.</td>    
                <td>Patti Smith Group</td>    
                <td>Because The Night</td>    
                <td>03:23</td>
            </tr>
            <tr data-cd-id="c1">
                <td>17.</td>    
                <td>Firehouse</td>    
                <td>When I Look Into Your Eyes</td>    
                <td>04:02</td>
            </tr>
            <tr data-cd-id="c1">
                <td>18.</td>    
                <td>Blackmore's Night</td>    
                <td>Keeper Of The Flame</td>
                <td>04:38</td>
            </tr>    
            <tr data-cd-id="c1">    
                <td>19.</td>    
                <td>Emerson, Lake & Palmer</td>    
                <td>Lucky Man</td>    
                <td>04:38</td>
            </tr>
            <tr data-cd-id="c1">
                <td>20.</td>
                <td>Kansas</td>
                <td>Dust In The Wind</td>
                <td>03:25</td>
            </tr>
            <tr>
                <td class="copen" data-c="c2">CD_02</td>
                <td>Interpret</td>
                <td>Titel</td>
                <td>Zeit</td>
            </tr>
            <tr data-cd-id="c2" class="c">
                <td>01.</td>
                <td>Meat Loaf</td>
                <td>Bat Out Of Hell</td>
                <td>04:54</td>
            </tr>

            <tr>
                <td class="copen" data-c="c3">CD_03</td>
                <td>Interpret</td>
                <td>Titel</td>
                <td>Zeit</td>
            </tr>
            <tr data-cd-id="c3" class="c">
                <td>01.</td>
                <td>Boston</td>
                <td>More Than A Feeling</td>
                <td>04:45</td>
            </tr>
            <tr>
            <th>02</th>
            <th colspan="3">2raumwohnung - Lasso</th>
            </tr>
            <tr>
                <td class="copen" data-c="c4">CD_01</td>
                <td>Interpret</td>
                <td>Titel</td>
                <td>Zeit</td>
            </tr>
            <tr data-cd-id="c4" class="c">
                <td>01.</td>
                <td>2raumwohnung</td>
                <td>Der letzte Abend auf der Welt</td>
                <td>03:34</td>
            </tr>
            
            
            
            
        </tbody>
        
    </table>
</body>
</html>
 
Hallo @Oliver77 , vielen Dank für Deine Hilfe.

Nicht ganz, es sollte so sein:

Album mit CD1 und eventl. CD2 und eventl. CD3 sichtbar. Wenn man nun auf CD1 klickt, sie also "öffnen" möchte, erscheinen die Titel, klickt man auf CD2, erscheinen die Titel der CD1 und CD2 usw.

Klickt man nun wieder auf CD1 oder CD2, schließen sich CD1 bzw. CD2 wieder, d. h. die Anzeige der Titel wird wieder "zugeklappt".

Und zum Schluss, wenn man alles wieder schließen möchte, klickt man auf das jeweilige Album und alles klappt sich wieder ein.
 
Ich hänge hier einen Code von damals an, der teilweise auch funktioniert.
Nein, er funktioniert überhaupt nicht: da werden th-Elemente per Javascript klickbar gemacht - diese Elemente sind aber per Tastaturbedienung nicht erreichbar, damit ist das Konstrukt unbedienbar.
Ich hätte diesen Code aber am liebsten ohne Javascript, sondern nur in CSS. Wenn es einfacher ist, mit Javascript.
Evtl. lässt sich das ganze über (verschachtelte) details-Elemente lösen?
 
solange @Sempervivum auf sich warten lässt
Ich bin im Moment unterwegs und nur eingeschränkt aktiv.
Wenn ich das richtig verstehe ist die Tabelle dreistufig aufgebaut: Übersicht - Album - CD und die Alben und CDS sollen unabhängig auf- und zu geklappt werden, nicht wahr?
 
Du, @Earlenrico , hattest geschrieben, dass dir eine Lösung ohne JS lieber sei. Man könnte daran denken, das Aufklappen mit summary-details zu machen. Allerdings hatte ich, glaube ich, mal Probleme, wenn man es in einer Tabelle verwendet. Müsste man ausprobieren.
 
Hallo @Oliver77 vielen Dank für deine Hilfe. Dein Vorschlag funktioniert bis auf eine Sache: Wenn ich das Album lfd. Nr. 01 einklappen möchte und ich auf 01. klicke, sollten CD01 und CD02 zuklappen, sprich verschwinden.

@Sempervivum: Es wäre eine Idee, es mit summary-details zu versuchen. Ich werde es mal ausprobieren. Ich melde mich bei euch, ob es funktioniert.
 
Ich habe jetzt mit summary-details probiert.
Code:
<html>
<head>
<meta charset="utf-8">
<title>musik</title>
</head>


<style>

summary{

background-color: #ddd;

}




</style>

<body>
<table border="1">
    <thead>
                    
            <tr>
            <th>Lfd. Nr.</th>
            <th>Name der CD</th>
            </tr>       
            <tr>           
            <th>01.</th>
            <th>100 Rock Hits - The Sound of my Life</th>
            </tr>
    </thead>
</table>               

        <details>

        <summary>CD_01
                        Interpret
                        Titel
                        Zeit    </summary>
                
                
                    
                    01.   
                    Golden Earring   
                    Radar Love   
                    05:05
                    
                    02.
                    Heart
                    Barracuda
                    04:24
                    
                    03.
                    Judas Priest
                    Living After Midnight
                    03:31
                    
                    
                    04.
                    Alice Cooper
                    No More Mr. Nice Guy
                    03:07
        </details>   
</body>
</html>

Aber sobald eine Tabelle mit ins Spiel kommt funkioniert summary-details nicht mehr.
 
Wenn ich das richtig gelesen habe, wird HTML5 summary-details in Tabellen nicht unterstützt.

Bitte nicht gleich „steinigen“, wenn ich es falsch verstanden habe.
 
Ich habe mein Vorhaben jetzt ohne Tabelle mal in Div‘s „gepackt“

Aber wirklich weiter bin ich nicht.

HTML:
<!Doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>musik</title>
</head>




<body>
        <div id="ueberschrift">
            Lfd. Nr.
            Name der CD
        </div>
                <div class="album">
                        01.
                        100 Rock Hits - The Sound of my Life
                </div>
                    <div class="cd">
                        CD_01
                        Interpret
                        Titel
                        Zeit
                    </div>
                    
                    <div class="titel">
                        01.   
                        Golden Earring   
                        Radar Love   
                        05:05
                    
                    
                        02.
                        Heart
                        Barracuda
                        04:24
                    
                
                        03.
                        Judas Priest
                        Living After Midnight
                        03:31
                    
                        04.
                        Alice Cooper
                        No More Mr. Nice Guy
                        03:07
                    
                    </div>
                    <div="cd">
                        CD_02
                        Interpret
                        Titel
                        Zeit
                    </div>
                    <div class="titel">
                
                        01.
                        Golden Earring
                        Radar Love
                        05:05
                    
                    
                        02.
                        Heart
                        Barracuda
                        04:24
                    </div>
                    <div class="album">
                        02.
                        Andrea Bocelli - Cieli Di Toscana
                    </div>
                    <div class="cd">
                        CD_01
                        Interpret
                        Titel
                        Zeit
                    </div>
                    
                    <div class="titel">
                    01.
                        Andrea Bocelli
                        Chiara
                        04:04
                    
                    </div>
                
    
</body>
</html>

Es würde mich sehr freuen, wenn ihr mir hier weiterhelfen könntet.

@Oliver77 Der Weg, den du mir gezeigt hast, funktioniert bis auf den letzten Schritt. Kannst du mir bitte hier noch weiterhelfen?
 
Na toll, hier werden fertige Lösungen auf Codepen geliefert und jetzt driftet es auf PN's ab. :frown: Wenn das der Sinn von Foren ist ... :frown:
 
Hab's mal mit Div's und purem Javascript anstatt mit jQuery gebaut.
<div class="line album" data-id="0">
Im Prinzip einfach die Tabelle als Div-Suppe nachgebaut - das ist genauso unbedienbar wie der Code in #1. Zum Öffnen/Schließen der Alben/CDs braucht es Buttons, die können auch per Tastatur bedient werden.
Da wird der Checkbox-Hack verwendet welcher ebenfalls nicht Barrierefrei ist - damit ist die verlinkte Seiten ebenfalls unbrauchbar.

Was spricht dagegen es mal mit einem details-Element zu versuchen? Das ist allerdings die Aufgabe des Fragestellers, nicht die der Antwortenden!
 
Zurück
Oben