Używam jquery.dataTables.js do tworzenia tabeli, a jedną z kolumn są adresy.

Chciałbym móc sortować adresy według nazwy ulicy zamiast numeru.

Próbowałem zastąpić domyślne sortowanie w następujący sposób:

       jQuery.extend(jQuery.fn.dataTableExt.oSort, {
        "num-html-pre": function (a) {
            var x = String(a).replace(/<[\\s\\S]*?>/g, "");
            return parseFloat(x);
        },

        "num-html-asc": function (a, b) {
            return ((a < b) ? -1 : ((a > b) ? 1 : 0));
        },

        "num-html-desc": function (a, b) {
            return ((a < b) ? 1 : ((a > b) ? -1 : 0));
        }
    });

    var table = $('#addresses').DataTable({
        "order": [[0, "asc"]]
        , "aoColumns": [{ "sType": "num-html", "aTargets": [0] }, { "sType": "numbercase" }, null, { "sType": "numbercase" }, null, { "sType": "numbercase" }]
    });

Ta połowa działa.

Paginuje po 10 rekordów na stronę i zwykle zwraca 200-300 rekordów, czyli 20-30 stron. Kod posortuje adres (wiersz [0]) alfabetycznie, ale tylko dla 10 rekordów na bieżącej stronie, a nie dla całego zestawu rekordów.

Ponadto łamie funkcjonalność, w której można kliknąć nagłówek kolumny, aby przełączać się między rosnąco / malejąco.

Drobna pomoc? Dzięki.

0
J.Cart 20 listopad 2019, 17:16

1 odpowiedź

Rozgryzłem to, musiałem upuścić parsefloat (x) w funkcji num-html-pre. Oto jak to wygląda teraz:

        "num-html-pre": function (a) {
            var x = String(a).replace(/<[\\s\\S]*?>/g, "").replace("&nbsp;", "");
            var y = x.split(' ');
            return y[1];
        },
0
J.Cart 20 listopad 2019, 17:56