Tabellenbereiche ausklappen mit Javascript?

2 Antworten

<!doctype html>
<script>
function show(element) {
  x = document.getElementById(element);
  if(x.style.visibility === 'visible') {
     x.style.visibility = 'collapse';
  } else {
     x.style.visibility = 'visible';
  }
}
</script>
<style>
  .collapse { visibility:collapse }
</style>
<table>
<tr>
   <td>
    <p>Dieser Bereich ist sichtbar (immer).</p>
    <p>Und <a href="#" onclick="show('ghost')"> hier</a> blenden wir einen "versteckten" Bereich ein und aus!</p>
   </td>
</tr>
<tr class="collapse" id="ghost">
   <td>
    <p>Dieser Bereich kann ein-/ausgeblendet werden!</p>
   </td>
</tr>
</table>

Alex

Deine HTML-Tabelle sollte bspw. so aussehen:

<table id="table">
  <tr>
    <td>
      <button data-index="1" type="button">Show / Hide</button>
    </td>
  </tr>
  <tr class="spoiler1 hidden">
    <td>Dieser Bereich kann ein-/ausgeblendet werden!</td>
  </tr>
</table>

Zum Ein-/Ausklappen wird ein Button verwendet. Dieser hält ein data-Attribut, in dem der Spoiler-Index steht, der später auf/zugeklappt werden soll. Die Tabellenreihe, die ausgeblendet werden soll, wird mit zwei CSS-Klassen ausgestattet. Einmal spoiler<Index> und dann einer Klasse, um den Zustand abzubilden.

Der script-Block darunter:

<script>
  var table = document.getElementById("table");

  function toggleVisibility(element) {
    var index = element.getAttribute("data-index");
    var sibling = table.querySelector(".spoiler" + index);

    if (sibling) {
      sibling.classList.toggle("hidden");
    }
  }

  var buttons = table.querySelectorAll("button");

  for (let i = 0; i < buttons.length; ++i) {
    buttons[i].addEventListener("click", (e) => toggleVisibility(e.currentTarget));
  }
</script>

Ich hole mir hier pauschal alle Buttons, die es in der Tabelle gibt und iteriere über sie drüber, um jedem einzelnen Button einen Listener für das Klickevent anzuhängen.

Der Index wird aus dem data-Attribut gelesen und der zugehörige Spoiler ermittelt. Wenn das Element existiert, kann seine Zustandsklasse entfernt (wenn bereits existent) oder zugefügt werden.

Ein Fiddle dazu: http://jsfiddle.net/b1g7ct3u/ (vorerst habe ich nur grob die Funktionalität getestet).

Mit PHP brauchst du nur das Markup für die Tabelle rendern. Da du mit einer Schleife arbeitest, sollte es leicht fallen, den Index je Zeile richtig zu setzen.

Zu guter Letzt noch die Definition des Klassenselektors hidden:

.hidden {
  display: none;
}
Dieter987 
Fragesteller
 17.01.2019, 12:39

Vielen Dank hat mir sehr geholfen.

0