Datatables - Order / Search

k3nguruh

Erfahrenes Mitglied
Hallo,

ich versuche gerade eine ordentliche Sortierung in Datatables hinzubekommen. Problem ist, dass die Sortierung bei Umlauten nicht hinhaut.
Wird zum Beispiel nach einem Land sortiert macht Datatables ...

...
Zypern
Österreich
...

draus. Im deutschen würde man aber Österreich bei O einordnen.

Jetzt habe ich ein Plugin gefunden ( Link ) und dieses angepasst.
Javascript:
var special_letters = {
    Ä: 'A',
    ä: 'a',
    Ö: 'O',
    ö: 'o',
    Ü: 'U',
    ü: 'u',
    ß: 's',
};
Dann noch umbenannt in "german-pre". Sortiert wird wie gewünscht. Wenn ich jetzt aber im Suchfeld nach Ö, ö, O oder o suche wird nichts gefunden.
Vielleicht gibt es ja bereits ein anderes Plugin, was mein Problem lösen könnte. Ich wäre jedenfalls dankbar.
 
In JavaScript kann man das mit String.prototype.localeCompare() sortieren:
Javascript:
[
    'A', 'a', 'Ä', 'ä',
    'O', 'o', 'Ö', 'ö',
    'U', 'u', 'Ü', 'ü',
    'Z', 'z',
    'ß', 's'
].sort((a, b) => a.localeCompare(b));
Hast du das schon versucht? Dann brauchst du dieses mapping nicht.
 
Hallo,
erstmal Danke für deine Antwort.

Aber wie ich schon geschrieben hatte, funktioniert das Sortieren auch mit der von mit geposteten Funktion. Mir ging es darum, dass das Suchen nicht funktioniert.

Aber Dank deinem Tipp mit "localeCompare()" bin ich auf das HIER gestossen. Scheint zwar so, als wenn das auch nur das ordnen betrifft, aber ich werde es zu Hause mal testen.
 
Ich habe da jetzt was gefunden, was meinen Zweck erfüllt. Es wird ordentlich sortiert aber bei der Suche wird, wenn man nach o sucht auch ö gefunden und auch umgekehrt. Damit kann man aber leben. Bei dem Plugin Getting Started | Select2 - The jQuery replacement for select boxes ist es genauso. Also scheint es wohl nicht anders zu gehen.

Javascript:
//
// Definieren der Funktion zur Verbesserung der Sortierung
DataTable.ext.order.intl = function (locales, options) {
  if (window.Intl) {
    const collator = new window.Intl.Collator(locales, options);
    const types = DataTable.ext.type;

    delete types.order["string-pre"];

    // Sortierfunktion für aufsteigende Reihenfolge
    types.order["string-asc"] = function (a, b) {
      return collator.compare(a, b);
    };

    // Sortierfunktion für absteigende Reihenfolge
    types.order["string-desc"] = function (a, b) {
      return collator.compare(b, a);
    };
  }
};
// Hier kannst du die gewünschten Sprach- und Optionseinstellungen für die Sortierung übergeben
// Beispiel: Deutsch ("de") mit Standardoptionen
DataTable.ext.order.intl("de");
 
Also scheint es wohl nicht anders zu gehen.
Geht nicht gibt's nicht, und gerade bei Datatables ist mir kaum je etwas untergekommen, das nicht machbar wäre. Allerdings sucht man sich manchmal einen Wolf bis man das betr. Feature gefunden hat.
Datatables stellt eine eigene Funktion für das Ersetzen von diakritischen Zeichen bereit und bietet auch die Möglichkeit, diese durch eine Variante zu ersetzen, die den eigenen Wünschen entspricht:
Code:
        // Wir ersetzen die Funktion für das Ersetzen der diakritischen Zeichen
        // indem wir diese aufrufen mit einer neuen Funktion als Parameter.
        // Diese Funktion gibt den betr. String unverändert zurück.
        DataTable.util.diacritics(str => {
            return str;
        });
        $('#example').DataTable({
        });
Damit wird dann "strikt" gesucht, bei Eingabe von ö wird nur ö gefunden und nicht o.
 

Neue Beiträge

Zurück