hotti: Daten nur einmal durchlaufen, Maximalwert hervorheben

hi,

das Thema etwas präziser: Zum Ausgeben einer html-table läuft das Script durch die Daten, wobei die <tr><td></td></tr>'s geschrieben werden. Bei diesem einen Durchlauf wird der Maximalwert einer Spalte ermittelt und in einer extra Tabellenzeile unten angehängt.

Die Zeile mit dem Maximalwert soll nun hervorgehoben werden mit css, dazu fallen mir zwei Möglichkeiten ein:

1- Ein Vorab-Durchlauf durch die Daten zum Ermitteln des Maximalwerts, der dann bei einem zweiten Durchlauf zum Ausgeben der Tabelle verfügbar ist;
2- Nur ein Durchlauf, es wird ein Platzhalter eingebaut, der nach dem Durchlauf mit dem entsprechenden Wert ersetzt wird.

Gibt es noch andere Möglichkeiten? Bitte mal um Hinweise,

Horst Ratlos

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  1. Hello Hotti,

    bei Trennung von Datenbeschaffung/ -behandlung und Darstellung ist doch sowieso schon vorher klar, in welcher Zeile der Maximalwert steckt.

    Und wenn Du partout Ausgabe und Datendurchlauf mischen willst, dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello Tom,

      bei Trennung von Datenbeschaffung/ -behandlung und Darstellung ist doch sowieso schon vorher klar, in welcher Zeile der Maximalwert steckt.

      Na, ok, dann werde ich die Datenbeschaffungsmaßnahme entsprechend anpassen und ein Loch in die Datenstruktur bohren, was ich dann mit dem Maximalwert stopfe ;-)

      Und wenn Du partout Ausgabe und Datendurchlauf mischen willst, [..]

      So stur bin ich nun auch wieder nicht. Favorit ist Plan A, siehe oben.

      Danke für den Denkanstoß!

      Viele Grüße aus Oppenheim,
      Horst Heimlich

      PS: Der Frühling kommt, der erste Hausrotschwanz ist da und heute zogen Bergfinken im Tiefflug über Rheinhessen. Ich drück' Dir die Daumen, dass bald auch im Harz der Schnee schmilzt!

      --
      Filzläusen isses egal, wem die Wolle gehört.
      1. Hello,

        PS: Der Frühling kommt, der erste Hausrotschwanz ist da und heute zogen Bergfinken im Tiefflug über Rheinhessen. Ich drück' Dir die Daumen, dass bald auch im Harz der Schnee schmilzt!

        Angina hat mir heute Abend auch zum ersten Mal frei gegeben ;-P

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hello,

          PS: Der Frühling kommt, der erste Hausrotschwanz ist da und heute zogen Bergfinken im Tiefflug über Rheinhessen. Ich drück' Dir die Daumen, dass bald auch im Harz der Schnee schmilzt!

          Angina hat mir heute Abend auch zum ersten Mal frei gegeben ;-P

          Ahh, hab mich schon gewundert, warst ne Weile wech. Schön Dass du wieder hier bist. Was mich bei Grippe, Wagina & Co immer wundert ist die Schnelligkeit der Ausbreitung, die lässt sich mit Schmier- und Tröpfcheninfektion absolut nicht erklären, es sei denn das tropft bundesweit von oben.

          Viele Grüße an Alle,
          Horst Hühnerklein

          1. Hello,

            Horst Hühnerklein

            Apropos "Hühnerklein".

            Als ich die letzten Tage gerne mal eine Hühner(nudel)suppe gegessen hätte und aus diesem Anlass in meinen Dosenschrank geschaut habe, da war leider die von mir so geliebte von ALDI nicht mehr drin, nur noch so eine untermittelmäßige von "Parfait". Keine Ahnung, wo ich die mal gekauft habe. Ich weiß jedenfalls, dass die Dose da noch steht, weil ich sie nicht mag.

            Zu ALDI hätte ich aber leider 15km hin und 15km zurück mit dem Auto fahren müssen. Das war einfach unmöglich.

            Normalerweise habe ich von dem Zeug immer vier bis mehr Dosen im Schrank stehen. Nur jetzt, wo ich sie gebraucht hätte, war nix mehr da...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. [latex]Mae  govannen![/latex]

              Normalerweise habe ich von dem Zeug immer vier bis mehr Dosen im Schrank stehen. Nur jetzt, wo ich sie gebraucht hätte, war nix mehr da...

              Ja und, was hast du erwartet? Murphy läßt sich genauso wenig austricksen wie der Sensenmann.

              Stur lächeln und winken, Männer!
              Kai

              --
              Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
              in Richtung "Mess up the Web".(suit)
              SelfHTML-Forum-Stylesheet
              1. Bounjoun Kai345,

                Ja und, was hast du erwartet? Murphy läßt sich genauso wenig austricksen wie der Sensenmann.

                Letzterer läßt manchmal aber von seinem Plan ab (Geschichte am Ende des Postings). Bei Murphy habe ich da meine Zweifeln... ;)

                Adiou.

                --
                Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
                Ist Rudi Carrell Gott? Oder George Harrison Ford?
    2. Hi!

      Und wenn Du partout Ausgabe und Datendurchlauf mischen willst, dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

      Das ist ungünstig, denn dann musst du dich darauf verlassen, dass der Browser die CSS-Datei beim nächsten Mal nicht aus seinem Cache holt und dass vorher der Apache sich an die von dir gesetzte exklusive Sperre hält und auf deren Freigabe wartet statt einen Zugriffsfehler zu melden. Dann schon lieber das CSS in die auszugebende Ressource schreiben. Wenn man dafür nicht die Ausgabe zwischenspeichern will, vertraute ich hier in die Toleranz der Browser, dass sie ein regelwidriges style-Element im Body berücksichtigen.

      Lo!

      1. Hi!

        Und wenn Du partout Ausgabe und Datendurchlauf mischen willst, dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

        Das ist ungünstig, denn dann musst du dich darauf verlassen, dass der Browser die CSS-Datei beim nächsten Mal nicht aus seinem Cache holt und dass vorher der Apache sich an die von dir gesetzte exklusive Sperre hält und auf deren Freigabe wartet statt einen Zugriffsfehler zu melden. Dann schon lieber das CSS in die auszugebende Ressource schreiben. Wenn man dafür nicht die Ausgabe zwischenspeichern will, vertraute ich hier in die Toleranz der Browser, dass sie ein regelwidriges style-Element im Body berücksichtigen.

        Interessantes Problem. Programmiertechnisch ergeben sich weitere Schwierigkeiten, wenn Daten zur Darstellung während der Darstellung ermittelt werden müssen, Stichwort: echo, Frickelei, Spaghetticode ;-)

        Wie Tom schon angemerkt hat, die Daten haben _vor_ der Darstellung bereitzustehen. Das ist mir gesten abend mal wieder klar geworden, auch wenn die Aufgabe auf den ersten Blick trivial erscheint.

        Viele Grüße,
        Hotti

      2. Hello,

        Und wenn Du partout Ausgabe und Datendurchlauf mischen willst, dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

        Das ist ungünstig, denn dann musst du dich darauf verlassen, dass der Browser die CSS-Datei beim nächsten Mal nicht aus seinem Cache holt und dass vorher der Apache sich an die von dir gesetzte exklusive Sperre hält und auf deren Freigabe wartet statt einen Zugriffsfehler zu melden.

        Der Name der CSS-Datei kann jedes Mal ein anderer sein. Da die Ressource "frisch berechnet" wird, kann sie auch den Namen der CSS-Datei neu vergeben, z.B. einen Timestamp anhängen.

        Die CSS-Datei kann auch durch ein Script ausgeliefert werden. Damit ist auch sichergestellt, dass dieses Locking beachtet.

        Dann schon lieber das CSS in die auszugebende Ressource schreiben. Wenn man dafür nicht die Ausgabe zwischenspeichern will, vertraute ich hier in die Toleranz der Browser, dass sie ein regelwidriges style-Element im Body berücksichtigen.

        Lieber valides HTML + CSS produzieren :-)

        Und wenn man schon bastelt, dann zumindest an der richtig(st)en Stelle, nämlich der Generierung der Ressourcen. Der Browser und der User sollten davon unbehelligt bleiben.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      3. Dann schon lieber das CSS in die auszugebende Ressource schreiben. Wenn man dafür nicht die Ausgabe zwischenspeichern will, vertraute ich hier in die Toleranz der Browser, dass sie ein regelwidriges style-Element im Body berücksichtigen.

        Das ist aber genauso ungünstig...
        Mit Zwischenspeicher gibt es ja X Varianten von IDs, die man vergibt und anschließend ins style-Element schreibt bis hin zur simplen textersetzung.
        Außerhalb des head erlaubt sind allerdings Script-Elemente, wenn die Hervorhebung nicht zwingend maschinenlesbar sein muss (immerhin wird der entsprechende Wert eh angehangen, da kann die lesende Maschine auch mal selber gucken!) wäre das vielleicht die annehmbarere Lösung...

        // (...)  
         echo('<tr id="line_'.$captions[$i].'"><td></td><td>'.$captions[$i].'</td><td>'.$values[$i].'</td></tr>');  
         if ($values[$i] > $values[$max]) {  
          $max = $i;  
         }  
        }  
        echo ('<tr><th>Max.</th><td>'.$captions[$max].'</td><td>'.$values[$max].'</td></tr>  
        </table>  
          
        <scipt type="text/javascript">  
         document.getElementById("line_'.$captions[$max].'").style.backgroundColor = "#C0FFEE";  
         document.getElementsByTagName("head")[0].getElementsByTagName("style")[0].firstChild.data += " \  
        \  
         #line_'.$captions[$max].' { \  
          border-style : dotted; \  
         } ";  
        </script>  
          
        <footer>'); // (...)
        

        Oder sowas... ich bin aber auch für EVA :D

        Aber so vier Sprachen in einander schachteln.... hier also PHP, HTML, CSS und JS und dabei keine Zwischenspeicherung zu verwenden (deren Kontext-Wechsel man dann Ebene für Ebene auflösen könnte) ist halt irgendwie anstrengend.
        Hier ist es ja wenn man es genau nimmt sogar CSS in HTML in JS in HTML in PHP (in HTML) ^^

        --
        sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
        1. moin,

          Aber so vier Sprachen in einander schachteln.... hier also PHP, HTML, CSS und JS und dabei keine Zwischenspeicherung zu verwenden (deren Kontext-Wechsel man dann Ebene für Ebene auflösen könnte) ist halt irgendwie anstrengend.

          Ja, es wird sehr schnell unübersichtlich. Mal angenommen, wir bleiben bei einer Backend-Lösung (MVC) und stellen die Daten vor der Darstellung bereit. Philosophische Frage: Wo bauen wir die Sortierfunktion ein, in der Bereitstellung der Daten (Konstruktor) oder in die Prozedure zur Darstellung?

          Hotti

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
          1. Hi!

            Aber so vier Sprachen in einander schachteln.... hier also PHP, HTML, CSS und JS und dabei keine Zwischenspeicherung zu verwenden (deren Kontext-Wechsel man dann Ebene für Ebene auflösen könnte) ist halt irgendwie anstrengend.

            Deswegen lieber gleich ein ordentliches Design als all diese Probleme mit invalidem Code oder einem aufwendigen dafür aber validen Workaround.

            Mal angenommen, wir bleiben bei einer Backend-Lösung (MVC) und stellen die Daten vor der Darstellung bereit. Philosophische Frage: Wo bauen wir die Sortierfunktion ein, in der Bereitstellung der Daten (Konstruktor) oder in die Prozedure zur Darstellung?

            Was hat denn ein Konstruktor mit der Bereitstellung von Daten zu tun? Wenn du MVC als Lösungsmuster verwendest, dann spielt darin ein Konstruktor keine Rolle, denn das MVC-Muster legt nicht fest, dass es mit OOP realisiert werden müsse. Wenn du OOP verwendest, ist fraglich, ob ein Konstruktor der geeignete Platz für die Erledigung einer Aufgabe jenseits der Initialisierung des Objekts ist.

            Wenn die Daten sowieso für jeden Request neu abgefragt werden, und die Reihenfolge für die Verarbeitung im abfragenden Script keine Rolle spielt, kann man sie ja gleich sortiert aus dem DBMS holen. Das setzt allerdings voraus, dass das DBMS nicht nur blind den Inhalt speichert sondern über die verwendete Zeichenkodierung Bescheid weiß und die Sortierregeln korrekt anwenden kann.

            Lo!

            1. hi,

              Was hat denn ein Konstruktor mit der Bereitstellung von Daten zu tun? Wenn du MVC als Lösungsmuster verwendest, dann spielt darin ein Konstruktor keine Rolle, denn das MVC-Muster legt nicht fest, dass es mit OOP realisiert werden müsse.

              Ein Objekt bietet sich an. Ergo erfolgt die Initialisierung im Konstruktor.

              Wenn du OOP verwendest, ist fraglich, ob ein Konstruktor der geeignete Platz für die Erledigung einer Aufgabe jenseits der Initialisierung des Objekts ist.

              Das ist genau die Frage: ist eine Sortierung jenseits der Initialisierung?

              Wenn die Daten sowieso für jeden Request neu abgefragt werden, und die Reihenfolge für die Verarbeitung im abfragenden Script keine Rolle spielt, kann man sie ja gleich sortiert aus dem DBMS holen.

              Damit müsste eine Benutzereingabe, nänmlich der Wunsch nach einer bestimmten Sortierung, bis zur Datenhaltung durchgereicht werden. Deine Initialisierung erfolgt im DBMS und die Sortieraufgabe ist nicht jenseits sondern mittendrin.

              Hotti

              1. Hi!

                Was hat denn ein Konstruktor mit der Bereitstellung von Daten zu tun? Wenn du MVC als Lösungsmuster verwendest, dann spielt darin ein Konstruktor keine Rolle, denn das MVC-Muster legt nicht fest, dass es mit OOP realisiert werden müsse.
                Ein Objekt bietet sich an. Ergo erfolgt die Initialisierung im Konstruktor.

                Vielleicht wenn du ein reines Datenobjekt verwendest, dann übergibst du ihm die Daten beim Konstruktoraufruf. Ein Objekt, das sich um Datenabfragen kümmert, wird kaum die Datenabfrage im Konstruktor machen.

                Wenn du OOP verwendest, ist fraglich, ob ein Konstruktor der geeignete Platz für die Erledigung einer Aufgabe jenseits der Initialisierung des Objekts ist.
                Das ist genau die Frage: ist eine Sortierung jenseits der Initialisierung?

                Aber sowas von. Da kommt ja erst noch die Abfrage vorher.

                Wenn die Daten sowieso für jeden Request neu abgefragt werden, und die Reihenfolge für die Verarbeitung im abfragenden Script keine Rolle spielt, kann man sie ja gleich sortiert aus dem DBMS holen.
                Damit müsste eine Benutzereingabe, nänmlich der Wunsch nach einer bestimmten Sortierung, bis zur Datenhaltung durchgereicht werden.

                Und was soll dagegen sprechen? Das DBMS hat Sortierfunktionen und vielleicht sogar schon einen passenden Index.

                Deine Initialisierung erfolgt im DBMS und die Sortieraufgabe ist nicht jenseits sondern mittendrin.

                Meine Initialisierung fand vor langer Zeit und nicht in einem DBMS statt, aber das spielt hier keine Rolle. Ansonsten sehe ich nicht, was genau du damit meinst. Die Sortierung gleich beim Datenabfragen vorzunehmen ist jedenfalls nicht unüblich.

                Lo!

                1. hi dedlfix,

                  Deine Initialisierung erfolgt im DBMS und die Sortieraufgabe ist nicht jenseits sondern mittendrin.

                  Meine Initialisierung fand vor langer Zeit und nicht in einem DBMS statt, aber das spielt hier keine Rolle. Ansonsten sehe ich nicht, was genau du damit meinst.

                  Du meinst die Erhebung der Daten, ja die spielt hier keine Rolle. Unter "Initialisierung" verstehe ich die Vorbereitung einer Ausgabe; in OOP erfolgt das im Konstruktor, der das Objekt, mit dem die Ausgabe erfolgen soll (z.B. HTML oder eine Ajax-Response) mit Daten betankt (initialisiert). Mit einer strikten Vorgehensweise wird dieses Objekt alle Daten enthalten, die für die Ausgabe gebraucht werden, so dass z.b. Summen oder Maximalwerte nicht etwa während der Darstellung ermittelt werden müssen.

                  Bei einer DB-Anbindung werden wir natürlich die Vorteile einer solchen Einrichtung nutzen, wozu auch das Sortieren gehört (da simmer uns einisch).

                  Es ist jedoch so, dass auszugebende Daten auch aus anderen Quellen stammen können und das Ergebnis einer SQL-Abfrage ist i.d.R. auch nur eine "Menge" mit namenlosen Werten ('Heinz', '33', '1.80', '92'), die für eine Ausgabe noch etwas erfahren müssen, z.B. {Vorname => 'Heinz', Alter => '33 Jahre', Länge => '1.80 Meter', Gewicht => '92 Kilogramm'}; hier ist OOP ein guter Ansatz.

                  Schönen Sonntag,
                  Grüße an Alle,
                  Hotti

                  1. Hi!

                    Unter "Initialisierung" verstehe ich die Vorbereitung einer Ausgabe; in OOP erfolgt das im Konstruktor, der das Objekt, mit dem die Ausgabe erfolgen soll (z.B. HTML oder eine Ajax-Response) mit Daten betankt (initialisiert). Mit einer strikten Vorgehensweise wird dieses Objekt alle Daten enthalten, die für die Ausgabe gebraucht werden, so dass z.b. Summen oder Maximalwerte nicht etwa während der Darstellung ermittelt werden müssen.

                    Die Vorbereitung einer Ausgabe kann ja erst einer der Verarbeitungsschritte sein. Eine Initialisierung findet üblicherweise vor der Verarbeitung statt. Das Ausgabe-Vorbereiten würde ich in einer Methode namens render() unterbringen. Das ist keine Aufgabe für einen Konstruktor.

                    Wenn du ein Container-Objekt hast, das die Daten der abgefragten Datensätze und noch ein paar Zusatzdaten (Summen, Maximalwerte) aufnimmt, so wird das im Laufe der Verarbeitung mit Inhalt gefüllt und nicht schon im Konstruktor. Der bekommt nur die Aufgabe, das leere Array für die Datensätze anzulegen und die Zusatzdatenspeicher zu initialisieren, falls beides nicht bereits beim Anlegen der Eigenschaften geschehen kann.

                    Das Befüllen des Arrays und die Ermittlung der Zusatzdaten erfolgt in einer anderweitig aufgerufenen Methode und ist ebenfalls kein Initialisierungsschritt.

                    Ich habe den Eindruck, das deine Auffassung von Initialisierung eine andere als die mir bekannte ist.

                    Es ist jedoch so, dass auszugebende Daten auch aus anderen Quellen stammen können und das Ergebnis einer SQL-Abfrage ist i.d.R. auch nur eine "Menge" mit namenlosen Werten ('Heinz', '33', '1.80', '92'), die für eine Ausgabe noch etwas erfahren müssen, z.B. {Vorname => 'Heinz', Alter => '33 Jahre', Länge => '1.80 Meter', Gewicht => '92 Kilogramm'}; hier ist OOP ein guter Ansatz.

                    Zumindest PHP kennt Fetch-Funktionen, die die Namen der Felder mitliefern. Wenn du für jeden Datensatz ein Datenobjekt nehmen willst, so sind dessen Eigenschaften-Namen bereits seit dem Anlegen der Klasse bekannt (wenn man nicht gerade auf dynamisches Anlegen von Eigenschaften setzt). Die intern verwendeten Namen sind also bereits bekannt und die Anzeigenamen für die Ausgabe stehen zum Beispiel bereits im Template. Das bekommt man herkömmlich auch bestens geregelt, da ist die OOP auch kein besserer Ansatz.

                    Lo!

                    1. hi,

                      Zumindest PHP kennt Fetch-Funktionen, die die Namen der Felder mitliefern. Wenn du für jeden Datensatz ein Datenobjekt nehmen willst, so sind dessen Eigenschaften-Namen bereits seit dem Anlegen der Klasse bekannt (wenn man nicht gerade auf dynamisches Anlegen von Eigenschaften setzt). Die intern verwendeten Namen sind also bereits bekannt und die Anzeigenamen für die Ausgabe stehen zum Beispiel bereits im Template. Das bekommt man herkömmlich auch bestens geregelt, da ist die OOP auch kein besserer Ansatz.

                      Besser als was? Meine Programmiertätigkeit ist auf Produktivität ausgerichtet mit dem Blickwinkel auf überschaubaren Code, Modularität und Teamarbeit. An diesen Eckpunkten finde ich gerade mit OOP interessante Lösungsansätze ;-)

                      Hotti

                      1. Hi!

                        Das bekommt man herkömmlich auch bestens geregelt, da ist die OOP auch kein besserer Ansatz.
                        Besser als was?

                        Steht doch davor: die herkömmliche Programmierung. Mehr als diese beiden Arten sind für das Umfeld Scriptprogrammierung nicht relevant.

                        Lo!

    3. ...dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

      Manchmal wäre die Bewertungsfunktion "Bitte ignorieren, komplett irriger Unfug" fachlich hilfreich.

      1. Hello,

        ...dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

        Manchmal wäre die Bewertungsfunktion "Bitte ignorieren, komplett irriger Unfug" fachlich hilfreich.

        Ja, dann könnte man sie bei deinem Posting drücken, da es weder substantiierten Fachbezug nimmt, noch Humor hat :-P

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. ...dann merkst Du Dir einfach die ID der Zeile (des HTML-Elementes), die/das das Maximum für sich reklamiert (beim Ausgeben...) und teilst dies dann Deinem CSS-File mit, das Du mit Beginn der Ausgabe erzeugst, sperrst und am Ende der HTML-Ausgabe fertig schreibst und dann freigibst zum Lesen durch den Browser.

        Manchmal wäre die Bewertungsfunktion "Bitte ignorieren, komplett irriger Unfug" fachlich hilfreich.

        Das Forum hier bietet Dir eine gute Gelegenheit, Deinen Lösungsvorschlag überzeugend darzustellen.

        Viele Grüße,
        Horst Datenbruzzler

  2. Hallo,

    beim Rendern der Tabelle kannst Du einfach die Pointer auf die schon erstellten Tabellenzellen mit dem jeweiligen Maximum in einem Array abspeichern und am Ende die tatsächlichen Zeilen mit den tatsächlichen Maxima nachträglich mit einer benötigten Klasse ausstatten. Schnell mit Zufallszahlen skizziert:

    ~~~javascript var data  = new RandomSeries(50, 5, 25),
            table = document.createElement("table"),
            tbody = document.createElement("tbody"),
            currentMax = 0,
            currentMaxTRs = [];

    data.forEach(function (randomNumber, index) {
            var TR       = document.createElement("tr"),
                firstTD  = document.createElement("td"),
                secondTD = document.createElement("td");

    firstTD.appendChild(document.createTextNode(index))
            secondTD.appendChild(document.createTextNode(randomNumber))
            TR.appendChild(firstTD)
            TR.appendChild(secondTD)
            tbody.appendChild(TR)

    if (randomNumber > currentMax) {
                currentMax = randomNumber
                currentMaxTRs = []
                currentMaxTRs.push(TR)
            } else if (randomNumber == currentMax) {
                currentMaxTRs.push(TR)
            }
        })

    table.appendChild(tbody)
        document.body.appendChild(table)

    currentMaxTRs.forEach(function (tr) {
            tr.className = "maximum"
        })

      
    [Hier das ganze Beispiel.](http://tepasse.org/tmp/hotte.html)
    
    1. Moin,

      Hier das ganze Beispiel.

      Das sieht gut aus, vielen Dank für Deine Mühe!!!

      Abstrakt: Frontseitige Lösung. Meine Backend-Lösung sieht jetzt so aus, dass die darzustellenden Daten in einem Array vorliegen zuzüglich der Informationen, die in der Darstellung eine Rolle spielen (Summe, Maximum).

      Interessante Studie einer an sich trivialen Aufgabenstellung.

      Schönen Sonntag,
      Hotti

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.