Gunnar Bittersmann: Mehrere Variablen bündeln

Beitrag lesen

@@borisbaer

function filterTable( e ) {

Wofür steht e?

    let filter = e.target.value.toUpperCase();

Ah, vermutlich für ein Event. Dann sollte der Parameter auch so benannt sein: event.

filter taucht im Folgenden nirgendwo rechts vom Gleichheitszeichen auf, d.h. es wird kein neuer Wert zugewiesen; es ist ein Konstante. let ist falsch, const ist richtig.

Gleiches gilt für tr, td0, td1 und td2.

Argl, tr. Der Bezeichnung ist nicht anzusehen, dass in der Konstanten(!) mehrere Zeilen (ein Array) gespeichert wird. Nicht

    let tr = document.querySelector( 'tbody' ).rows;

sondern

    const rows = document.querySelector( 'tbody' ).rows;

    for ( let i = 0; i < tr.length; i++ ) {

        let td0 = tr[i].cells[0].textContent.toUpperCase();}

Die 2000er haben angerufen. Sie hätten gerne ihre Old-school-Schleifen zurück.

Mit der erwähnten Umbenennung in rows:

    for ( let row of rows ) {

        const td0 = row.cells[0].textContent.toUpperCase();}

Wofür steht td0? Nicht für ein td-Element, sondern für dessen Textinhalt (transformiert in Großbuchstaben). Die Benennungen td0, td1 und td2 sind also ebenfalls schlecht.

Und warum nicht sowas wie (ungetestet)

    for ( let row of rows ) {

        const cellContents = row.cells.map(x => x.textContent.toUpperCase());}

Statt td0, td1 und td2 dann cellContents[0], cellContents[1] bzw. cellContents[2].


        tr[i].style.display =
            td0.indexOf( filter ) > -1 ||
            td1.indexOf( filter ) > -1 ||
            td2.indexOf( filter ) > -1
            ? "" : "none";

Nein!! Man sollte i.d.R. niemals mit JavaScript Werte von CSS-Eigenschaften setzen, sondern Änderungen im DOM machen. Zum Verstecken bietet HTML das hidden-Attribut:

        tr[i].hidden = 
            td0.indexOf( filter ) > -1 ||
            td1.indexOf( filter ) > -1 ||
            td2.indexOf( filter ) > -1
            ? false : true;

Wobei man gleich den Booleschen Wert zuweisen kann:

        tr[i].hidden = !(
            td0.indexOf( filter ) > -1 ||
            td1.indexOf( filter ) > -1 ||
            td2.indexOf( filter ) > -1
        );

Mit de Morgan kriegt man auch die Negation weg:

        tr[i].hidden = 
            td0.indexOf( filter ) == -1 &&
            td1.indexOf( filter ) == -1 &&
            td2.indexOf( filter ) == -1;

(Ebenfalls ungetestet. Zu tr[i] und td0, td1, td2 siehe oben.)

🖖 Живіть довго і процвітайте

--
When the power of love overcomes the love of power the world will know peace.
— Jimi Hendrix