Gunnar Bittersmann: Inhalte ausblenden

Beitrag lesen

@@Meowsalot

Ein paar Anmerkungen hab ich noch:

          let pressed = event.target.getAttribute('aria-pressed') === 'true'
          event.target.setAttribute('aria-pressed', String(!pressed));

          let pressed1 = event.target.getAttribute('aria-pressed') === 'true'

Du hattest doch event.target.getAttribute('aria-pressed') gerade vorher schon mal abgefragt, danach auf das Gegenteil !pressed gesetzt, weißt also genau, was da jetzt drinsteht. Kein Grund, das nochmals abzufragen, du kannst genauso !pressed verwenden; pressed1 brauchst du nicht.

BTW, pressed ist kein besonders glücklich gewählter Bezeichner, da daraus nicht hervorgeht, ob das den Zustand vorher oder den neuen Zustand bezeichnet. Die Variable sollte umbenannt werden.

          if (pressed1 == true) {
            document.getElementById('eintraege').setAttribute('data-filtered','true');
          } else {
            document.getElementById('eintraege').setAttribute('data-filtered','false');
          }

Du willst in beiden Zweigen dasselbe tun, nämlich dem data-filtered-Attrubut einen booleschen Wert zuweisen. (Genauer gesagt: einen String, der einen booleschen Wert repräsentiert.)

Dafür brauchst du kein if, das machst du analog wie oben beim aria-pressed-Attribut. Deren Werte sollen ja immer übereinstimmen, also:

let pressed = event.target.getAttribute('aria-pressed') === 'true';
event.target.setAttribute('aria-pressed', String(!pressed));
document.getElementById('eintraege').setAttribute('data-filtered', String(!pressed));

Es muss auch nicht sein, das Element mit der ID "eintraege" jedesmal neu zu suchen. Das kannst du einmal am Anfang erledigen (also außerhalb des Eventhandlers):

const eintraegeTableElement = document.getElementById('eintraege');

oder

const eintraegeTableElement = document.querySelector('#eintraege');

Im Eventhandler dann

eintraegeTableElement.setAttribute('data-filtered', String(!pressed));

oder

eintraegeTableElement.dataset.filtered = String(!pressed);

          let text = event.target.textContent === 'Alle anzeigen' ? 'Nur meine anzeigen' : 'Alle anzeigen';
          event.target.textContent = text;
        });

Noch eine überflüssige Abfrage; die (sichtbare) Buttonbeschriftung hängt auch mit dem pressed-Zustand zusammen:

let text = pressed ? 'Nur meine anzeigen' : 'Alle anzeigen';
event.target.textContent = text;

Wobei es hier keinen Sinn macht, da über eine Variable text zu gehen. Gleich direkt:

event.target.textContent = pressed ? 'Nur meine anzeigen' : 'Alle anzeigen';

LLAP 🖖

--
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann