@@Meowsalot
Hallo Meowsalot,
ich habe es so hinbekommen: https://codepen.io/anon/pen/PRaLbB
Sieht doch schon mal ganz gut aus. Der Button ändert sein aria-pressed-Attribut und das data-filtered-Attribut der Tabelle.
Noch eins, zwei Anmerkungen:
filterButtonElement.addEventListener('click', (e) => { let pressed = e.target.getAttribute('aria-pressed') === 'true' e.target.setAttribute('aria-pressed', String(!pressed)); });
Ich bin kein Freund von diesem e-Dingens, sondern von sprechenden Variablen. Ich nenne das immer event.
filterButtonElement.addEventListener('click', (e) => { let pressed = e.target.getAttribute('data-filtered') === 'true' document.getElementById('eintraege').setAttribute('data-filtered','true'); }); filterButtonElement.addEventListener('click', (e) => { let text = e.target.textContent === 'Alle anzeigen' ? 'Nur meine anzeigen' : 'Alle anzeigen'; e.target.textContent = text; });
Warum 2× EventListener? Das gehört doch alles zusammen, sollte also in einem Block stehen.
Allerdings verschwinden meine Einträge noch immer nicht
Das liegt daran, dass deine Selektoren im Stylesheet nicht greifen:
-
#eintraege [data-filtered="true"]: Nicht ein Nachfahrenelement des Elements mit der ID "eintraege" (d.h. der Tabelle) hat dasdata-filtered-Attribut, sondern die Tabelle selbst. Das Leerzeichen muss weg. -
#eintraege[data-filtered="true"] > tr:not([data-name-sender="User1"])geht immer noch nicht, weiltrkein Kindelement vontableist.>ist aber der Kombinator für direkte Nachfahren.(Das wäre auch so, wenn es keine
<tbody>-Tags im HTML-Code gäbe; kein Aprilscherz.)Als Nachfahrenelement
#eintraege[data-filtered="true"] tr:not([data-name-sender="User1"])ohne>selektiert ist wohl aber auch nicht das, was du willst, denn die Kopfzeile imtheadsoll ja stehenbleiben.Also nur die Zeilen im
tbodyselektiert:#eintraege[data-filtered="true"] > tbody > tr:not([data-name-sender="User1"])
Das funktioniert dann schon mal:
#eintraege[data-filtered="true"] > tbody > tr:not([data-name-sender="User1"])
{
display: none;
}
Aber nicht die Kombination
#eintraege[data-filtered="true"] > tbody > tr:not([data-name-sender="User1"]),
#eintraege[data-filtered="true"] > tbody > tr:not([data-name-empf="User1"])
{
display: none;
}
Dann sind alle Zeilen weg, die kein data-name-sender="User1" haben, also auch die Zeilen, die data-name-empf="User1" haben. Und es sind alle Zeilen weg, die kein data-name-empf="User1" haben, also auch die Zeilen, die data-name-sender="User1" haben.
Du willst aber alle Zeilen weghaben, die weder data-name-sender="User1" noch data-name-empf="User1" haben:
#eintraege[data-filtered="true"] > tbody > tr:not([data-name-sender="User1"]):not([data-name-empf="User1"])
{
display: none;
}
LLAP 🖖
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann