CUCM Logo
 

Blog - Vorstellung des jQuery Plugin "DataTable" für HTML Tabellen sortieren, pagination und suchen

Autor: Nick   Kommentare (1)   Kurz URL: http://bit.ly/lj262G   Bei Twitter speichern   Bei Facebook speichern   Bei Digg speichern   Bei Delicious speichern   Bei Mr. Wong speichern   Bei Google Bookmarks speichern
13.05.2011
Nach dem bereits das Javascript jquery Plugin tableSorter zum Sortieren von HTML Tabellen vorgestellt wurde, wird nun das umfangreichere "DataTables" vorgestellt. Dies enthält noch zusätzliche Funktionen zur Pagination und Suche der Inhalte. Pagination wird das Verteilen von Inhalten auf mehrere Seiten genannt. Das Suchen ist eher ein Filtern der Ergebnisse.

Verwendung von DataTables

Damit DataTables zuverlässig funktioniert, muss die HTML Tabelle sauber mit thead und tbody Elementen entworfen sein.

Tabellen Defintion:


<table border="0" cellspacing="0" cellpadding="0" class="" id="ID_table">
<thead>
    <tr>
        <th>Spieler</th>
        <th>Rang</th>
        <th>Punkte Gesamt</th>
        <th>Punkte Durchschnitt</th>
        <th>Punkte pro Spieler</th>
        <th>Best</th>
        <th>Siege</th>
        <th>Spiele</th><th>Letztes Spiel</th>
    </tr>
</thead>
<tbody>
    <tr><td>Xanner</td><td>1</td><td>1941,00</td><td>970,00</td><td>141,50</td><td>980</td><td>1</td><td>2</td><td>30.04.2011</td></tr>
    <tr><td>Rock</td><td>2</td><td>6229,00</td><td>889,00</td><td>154,14</td><td>1306</td><td>4</td><td>7</td><td>07.05.2011</td></tr>
    <tr><td>Imp</td><td>3</td><td>4992,00</td><td>713,00</td><td>119,29</td><td>1046</td><td>1</td><td>7</td><td>07.05.2011</td></tr>
    <tr><td>Phönix</td><td>4</td><td>2772,00</td><td>693,00</td><td>118,50</td><td>950</td><td>1</td><td>4</td><td>30.04.2011</td></tr>
    <tr><td>LosSpackos</td><td>5</td><td>3325,00</td><td>665,00</td><td>102,20</td><td>981</td><td>0</td><td>5</td><td>07.05.2011</td></tr>
    <tr><td>Granitor</td><td>6</td><td>1255,00</td><td>627,00</td><td>125,00</td><td>766</td><td>0</td><td>2</td><td>12.02.2011</td></tr>
    <tr><td>Soof</td><td>7</td><td>2430,00</td><td>486,00</td><td>76,20</td><td>549</td><td>0</td><td>5</td><td>07.05.2011</td></tr>
    <tr><td>Patko</td><td>8</td><td>2139,00</td><td>427,00</td><td>77,00</td><td>550</td><td>0</td><td>5</td><td>07.05.2011</td></tr>
    <tr><td>Yoshi</td><td>9</td><td>1243,00</td><td>414,00</td><td>69,00</td><td>505</td><td>0</td><td>3</td><td>07.05.2011</td></tr>
    <tr><td>Dana</td><td>10</td><td>228,00</td><td>228,00</td><td>28,00</td><td>228</td><td>0</td><td>1</td><td>30.04.2011</td></tr>
    <tr><td>Sascha</td><td>11</td><td>134,00</td><td>134,00</td><td>16,00</td><td>134</td><td>0</td><td>1</td><td>30.04.2011</td></tr>
    <tr><td>Pascale</td><td>12</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
    <tr><td>Marco</td><td>13</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
    <tr><td>Richy</td><td>14</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
    <tr><td>Andy</td><td>15</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
    <tr><td>Jessy</td><td>16</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
    <tr><td>Rik</td><td>17</td><td>0,00</td><td>0,00</td><td>0</td><td>0</td><td>0</td><td>0</td><td>-</td></tr>
</tbody>
</table>


Darstellung der nackten Tabelle:


Spieler Rang Punkte Gesamt Punkte Durchschnitt Punkte pro Spieler Best Siege SpieleLetztes Spiel
Xanner11941,00970,00141,509801230.04.2011
Rock26229,00889,00154,1413064707.05.2011
Imp34992,00713,00119,2910461707.05.2011
Phönix42772,00693,00118,509501430.04.2011
LosSpackos53325,00665,00102,209810507.05.2011
Granitor61255,00627,00125,007660212.02.2011
Soof72430,00486,0076,205490507.05.2011
Patko82139,00427,0077,005500507.05.2011
Yoshi91243,00414,0069,005050307.05.2011
Dana10228,00228,0028,002280130.04.2011
Sascha11134,00134,0016,001340130.04.2011
Pascale120,000,000000-
Marco130,000,000000-
Richy140,000,000000-
Andy150,000,000000-
Jessy160,000,000000-
Rik170,000,000000-


Einbinden der DataTables Bibliothek:


<style type="text/css" title="currentStyle">
    @import "<pfad_zu_datables>/DataTables/media/css/demo_page.css";
    @import "<pfad_zu_datables>/DataTables/media/css/demo_table.css";
</style>

<script type="text/javascript" language="javascript" src="<pfad_zu_datables>/DataTables/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="<pfad_zu_datables>/DataTables/media/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        $('#ID_table').dataTable({
            "sPaginationType": "full_numbers", // Darstellungsvarianten 'two_button' oder 'full_numbers'
            "oLanguage": {
                "sUrl" : "<pfad_zu_DataTables>/DataTables/media/german.txt" // Deutsche Übersetzung (Muss extra angelegt / heruntergeladen werden)
            },
            "aaSorting": [[1,'asc']] // Spalte die Initial Sortierung übernimmt (hier: Rang)
        });
    });
</script>



Darstellung der selben Tabelle mit DataTables:


Spieler Rang Punkte Gesamt Punkte Durchschnitt Punkte pro Spieler Best Siege SpieleLetztes Spiel
Xanner11941,00970,00141,509801230.04.2011
Rock26229,00889,00154,1413064707.05.2011
Imp34992,00713,00119,2910461707.05.2011
Phönix42772,00693,00118,509501430.04.2011
LosSpackos53325,00665,00102,209810507.05.2011
Granitor61255,00627,00125,007660212.02.2011
Soof72430,00486,0076,205490507.05.2011
Patko82139,00427,0077,005500507.05.2011
Yoshi91243,00414,0069,005050307.05.2011
Dana10228,00228,0028,002280130.04.2011
Sascha11134,00134,0016,001340130.04.2011
Pascale120,000,000000-
Marco130,000,000000-
Richy140,000,000000-
Andy150,000,000000-
Jessy160,000,000000-
Rik170,000,000000-


Übesetzung ins Deutsche

Die Übersetzung können entweder als JSON Datei per Ajax nachgeladen werden oder bei der Initialiserung mittels der "oLanguage" Eigenschaft. Deutsche und andere Übersetzungen sowie Hinweise findet man auf der Plugin Seiten für Internationalisierung.

Styling von DataTables

Zum einen können die Demo Stylesheets übernommen werden bzw. entsprechend dem Seiten Layout angepasst werden. Anderseits wird ThemeRoller von jQuery UI unterstützt. Weitere Infos finden sich auf der Styling Seite von DataTables.

Sortier Problem mit Komma bei DataTables

Auch hier gibt es wieder Probleme beim Sortieren von Zahlen die Kommas anstelle von Punkten (amerikanisches System) als Nachkommastellen haben. Zum Glück gibt es schon ein fertiges Plugin auf http://www.datatables.net/examples/plug-ins/sorting_plugin.html.


jQuery.fn.dataTableExt.aTypes.unshift(
    function ( sData )
    {
        var sValidChars = "0123456789-,";
        var Char;
        var bDecimal = false;

        /* Check the numeric part */
        for ( i=0 ; i<sData.length ; i++ )
        {
            Char = sData.charAt(i);
            if (sValidChars.indexOf(Char) == -1)
            {
                return null;
            }

            /* Only allowed one decimal place... */
            if ( Char == "," )
            {
                if ( bDecimal )
                {
                        return null;
                }
                bDecimal = true;
            }
        }

        return 'numeric-comma';
    }
);

jQuery.fn.dataTableExt.oSort['numeric-comma-asc']  = function(a,b) {
    var x = (a == "-") ? 0 : a.replace( /,/, "." );
    var y = (b == "-") ? 0 : b.replace( /,/, "." );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) {
    var x = (a == "-") ? 0 : a.replace( /,/, "." );
    var y = (b == "-") ? 0 : b.replace( /,/, "." );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};



Links

DataTables Homepage
DataTables Features - Features die in DataTables (de-) aktiviert werden können
DataTables Options


Den Artikel empfehlen

Dem Computerclub folgen und über Neuigkeiten informiert werden:

RSS Feeds RSS Feeds
CUCM @ Twitter Twitter
CUCM @ Facebook Facebook
CUCM @ Google+ Google+
 

Kommentare

 

Nils

05.02.2012
Hallo,

es wäre schön, wenn es auch noch ein Tutorial zur Sortierung der Datums-Einträge gäbe. Die werden nämlich, genau wie bei mir, NICHT korrekt sortiert. Ich verwende hier das, auf der Webseite http://www.datatables.net/plug-ins/sorting, angebote Plugin Date (dd/mm/YYY hh:ii:ss).

Initialisiere die Tabelle in custom.js mit:

$('#tabelle').dataTable({
"bPaginate": true,
"iDisplayLength": 100
});

Und in meiner Header steht folgendes:



source Date (dd/mm/YYY hh:ii:ss)


---> Sortierung aller Spalten klappt, nur beim Datum immer noch gleicher Fehler wie vorher. Irgendeine Idee?
 

Nick´Zur Webseite

06.02.2012
Hallo Nils,

vielleicht mache ich noch ein Tutorial zu den (Sortier) Plugins. Ich habe mir das dd/mm/yyyy Plugin eben angeschaut. Es funktioniert, es ist aber nicht sehr "Fehler" Tolerant. Enthalt die Spalte zum Beispiel "-" weil das Datum unbekannt ist, funktioniert das Sortieren nicht.

Weiterhin müssen Sie Ihre Tabellen Initialisation ergänzen. Sie müssen mittels "aoColumns" das Plugin zuweisen. Alle Spalten der Tabelle müssen in "aoColumns" definiert werden, für übernahme der Standard Werte nimmt man null. Das Beispiel hat 3x null, also hat die Tabelle 4 Spalten.


Beispiel:

$('#tabelle').dataTable({
"bPaginate": true,
"iDisplayLength": 100,
"aoColumns": [
null,
null,
null,
{"sType": "date-euro"} // Spalte mit Datum im Format: dd/mm/YYY hh:ii:ss
]
});

Weitere Infos zu aoColumns:
http://www.datatables.net/usage/columns

Ich hoffe, ich konnte damit schon mal auf die Schnelle helfen.

Grüsse,
Nick
 
 

Kommentar Verfassen

 

1) Ihre Daten

(erforderlich)
 
(erforderlich)
Ihre E-Mail Adresse wird nicht auf der Seite veröffentlicht. Sie dient ausschliesslich der möglichen Kontaktaufnahme unserseits.
 
 

2) Ihre Nachricht

 
 

3) Hinweis zur Freischaltung

Um Spam Missbrauch zu verhindern, werden alle Kommentare zuerst von uns geprüft. Daher kann es einen Augenblick dauern, bis Ihr Kommentar auf unserer Webseite erscheint. Spam oder was wir dafür halten, wird unsererseits kommentarlos gelöscht.
To avoid Spam on our Page, we check all Comments before publish. So save you and us Time and dont Spam.