Marius: Tabellensortierung mit JavaScript

hallo,

ich habe auf meiner ASP-Seite das Javascript von Stefan Münz (hier zu finden) zum sortieren meiner angezeigten Tabelle benutzt.

Bis auf das Hinzufügen der Möglichkeit auch nach Datum sortieren zu können, habe ich daran nichts geändert.

Wenn ich jetzt allerdings viele Sätze sortieren will (sagen wir mal über 100), dann ist die Ausführung dieses Scripts zu langsam (ca. 2 Minuten oder länger...auch bei einer Sortierung nach numerischen Werten).

Hat jemand eine Idee zu welcher Alternative ich zum sortieren meiner Tabelle greifen könnte. (21 Spalten mit im Schnitt über 100 Zeilen - je nach Abfrage des Users)
Die Tabelle ist wie in dem Beispiel von Stefan Münz natürlich normal mit <THEAD> und <TBODY> aufgebaut und beinhaltet auch keine grossen Werte (num, varchar(bis 50), datum).

Wenn es hilfreich wäre noch mehr Informationen zu posten lasst es mich bitte wissen. Es würde mir SEHR weiterhelfen wenn jemand zu diesem Problem einen Vorschlag hätte. (anderes Sortierverfahren, etc.)

Vielen Dank schon mal,
Marius

  1. Wenn es hilfreich wäre noch mehr Informationen zu posten lasst es mich bitte wissen. Es würde mir SEHR weiterhelfen wenn jemand zu diesem Problem einen Vorschlag hätte. (anderes Sortierverfahren, etc.)

    Meine Erfahrungen mit JavaScript und Zugriffen auf den DOM-Baum sind ganz ähnlich (schlecht).

    ASP unterstützt doch gerade auch das serverseitige Sortieren mit so genannten data grids (wobei ich auch da schlechte Erfahrungen gemacht habe).

    1. hi,

      Meine Erfahrungen mit JavaScript und Zugriffen auf den DOM-Baum sind ganz ähnlich (schlecht).

      ASP unterstützt doch gerade auch das serverseitige Sortieren mit so genannten data grids (wobei ich auch da schlechte Erfahrungen gemacht habe).

      und wie würdest du dann sortieren? Ich kann mir nicht vorstellen, dass es Sinn machen würde den Inhalt mit geändertem "order by" neu aufzurufen, sobald ein User eine Tabellenüberschrift anklickt...

      und das DataGrid kann ich glaube nicht nutzen, da ich derzeit noch keine .Net Seiten laufen lassen kann.

      Marius

  2. Hallo Marius,

    ich kenne das Script nicht. Aber vieleicht ist ja meine Version eine Alternative für Dich:

    http://www.j-berkemeier.de/TableSort.html
    http://www.j-berkemeier.de/TableSort_Beispiel.html

    Gruß, Jürgen

    1. Hallo Jürgen,

      ich kenne das Script nicht. Aber vieleicht ist ja meine Version eine Alternative für Dich:
      http://www.j-berkemeier.de/TableSort.html
      http://www.j-berkemeier.de/TableSort_Beispiel.html

      Dein Skript gefällt mir. Noch schöner wäre Dein Beispiel, wenn sich die Spaltenbreite durch den eingeblendeten Pfeil nicht verändern würde. [1]

      Freundliche Grüße

      Vinzenz,

      im Ansprüche stellen groß :-)

    2. ich kenne das Script nicht. Aber vieleicht ist ja meine Version eine Alternative für Dich:

      Ist das auch bei grösseren Tabellen hinreichend performant?

      1. Hallo Hamstar,

        Ist das auch bei grösseren Tabellen hinreichend performant?

        Javascript ist keine Programmiersprache für performante Lösungen. Unter http://www.uni-muenster.de/Physik.AP/Buecher-de.html findest Du eine "Extrem"-Anwendung. Fast 3000 Zeilen, Sortierzeit (640er CPU, 3.2 Ghz, FF 2.0) knapp unter 30 s. Beim zweiten mal geht es schneller, da die Tabelle nicht mehr gelesen werden muss.

        Gruß, Jürgen

    3. Hi Jürgen,

      ich kenne das Script nicht. Aber vieleicht ist ja meine Version eine Alternative für Dich:

      http://www.j-berkemeier.de/TableSort.html
      http://www.j-berkemeier.de/TableSort_Beispiel.html

      Vielen Vielen Dank für dein Script!

      Ich habe das mal schnell angehängt und die Tabelle umgeschrieben und siehe da - selbst mein ExtremFall (ein Kunde, bei dem über 800 Sätze ausgegeben werden) kann ich jetzt mit ca. 20+- Sekunden jede Spalte sortieren lassen.

      Das ist zwar immernoch recht langsam werden die User sagen, aber es ist halt HTML und kein Excel was sie da vor sich haben. (Wenn ich mit dieser Begründung unrecht hab - korrigiert mich bitte...)

      Also, ich hoffe es ist I.O. wenn ich dein Script auch modifiziere, da ich in meiner Tabelle ein paar Spalten habe, in denen nicht immer ein Wert vorhanden ist. Dein Script fügt diese leider nicht an Anfang oder Ende, sondert sortiert sie zwischen rein...

      Kleinigkeiten, ich sollte mich nicht beschweren ;)

      Vielen Dank noch mal. Gruss
      Marius

      1. Hallo Marius,

        Das ist zwar immernoch recht langsam werden die User sagen, aber es ist halt HTML und kein Excel was sie da vor sich haben. (Wenn ich mit dieser Begründung unrecht hab - korrigiert mich bitte...)

        ich greife auf die Tabellenfelder mit innerHTML zu. Wenn Du als Inhalt keine Tags (Links, Bilder etc.) hast, stell mal auf firstChild.nodeValue um. Du musst nur die Kommentare (//) umsetzen. Danach sollte es etwas schneller gehen.

        Also, ich hoffe es ist I.O. wenn ich dein Script auch modifiziere, da ich in meiner Tabelle ein paar Spalten habe, in denen nicht immer ein Wert vorhanden ist. Dein Script fügt diese leider nicht an Anfang oder Ende, sondert sortiert sie zwischen rein...

        Du musst da einen Fall gewählt haben, an den ich beim Entwickeln und Testen nicht gedacht habe. Kannst Du mal eine Beispieltabelle oder einen Auszug daraus posten? Dann werde ich mich um das Problem kümmern.

        Gruß, Jürgen

        1. Nabend Jürgen,

          ich greife auf die Tabellenfelder mit innerHTML zu. Wenn Du als Inhalt keine Tags (Links, Bilder etc.) hast, stell mal auf firstChild.nodeValue um. Du musst nur die Kommentare (//) umsetzen. Danach sollte es etwas schneller gehen.

          hab ich mal probiert - allerdings bekomme ich dann die Fehlermeldung "Object required" (habe beide Stellen "umkommentiert"...kenne mich aber  ehrlich gesagt zu wenig aus um den Fehler zu finden)

          muss ich dafür in meiner Tabellen-Definition was ändern?

          Du musst da einen Fall gewählt haben, an den ich beim Entwickeln und Testen nicht gedacht habe. Kannst Du mal eine Beispieltabelle oder einen Auszug daraus posten? Dann werde ich mich um das Problem kümmern.

          z.B.

            
          <TABLE id="auftraege" class="sortierbar">  
          <THEAD>  
          <TR>  
            <TH nowrap class="sortierbar">spalte1</TH>  
          </TR>  
          </THEAD>  
          <TBODY>  
          <tr>  
            <td>206</td>  
          </tr>  
          <tr>  
            <td></td>  
          </tr>  
          <tr>  
            <td>208</td>  
          </tr>  
          </TBODY>  
          </TABLE>  
          
          

          usw.

          das sind Null-Werte aus der Datenbank...also nicht mal ein Leerzeichen im HTML.

          Vielen Dank noch mal das du dich hier so einsetzt!

          Marius

          1. Hallo Marius,

            bei leeren TDs geht das mit dem firstChild nicht, da es ja in leeren Feldern keins gibt.
            Da ich beim Vergleich automatisch prüfe, ob im Feld Text, eine Zahl oder ein Datum steht, gibt es dann auch bei innerHTML mit leeren Feldern bzw. im IE auch mit &nbsp; Probleme. Diesen Fall habe ich nicht berücksichtigt. Da werde ich mich bei Gelegenheit wohl darum kümmern müssen.

            Gruß, Jürgen