2012-02-16 20 views
5

Mam tabelę z kolumną o liczbach od około -10 do 10 i kilka pustych kolumn.jquery tablesorter sortowanie pustych komórek tabeli ostatnie

Chciałbym, aby tablesorter zawsze umieszczał puste kolumny na dole tabeli. Nawet jeśli sortuję rosnąco lub malejąco.

Jak to:

-1 
0 
2 
3 
<empty cell> 
<empty cell> 

lub tak:

3 
2 
0 
-1 
<empty cell> 
<empty cell> 

Zauważ, że mój problem jest taki sam jak pytanie 4792426 wyjątkiem, że chcę pustych komórek na dnie zarówno gdy kolejność sortowania jest malejący i rosnąco.

Usuwanie wierszy nie jest opcją.

Odpowiedz

7

Znalazłem sposób na rozwiązanie mojego problemu.

Rozwiązanie dostarczone przez ssell nie działa. Dane tabeli są analizowane tylko raz, więc nie można użyć zmiennej globalnej do jej sterowania. Niezła próba! :-)

Ten kod jest potrzebny. Jak widzisz, przeładowuję funkcje formatFloat i formatInt tak, aby zwracały wartość zamiast domyślnej wartości: . Funkcja sortowania wewnątrz tablesortera wykonuje dla mnie resztę magicznie.

 $(document).ready(function() { 
     $.tablesorter.formatInt = function (s) { 
      var i = parseInt(s); 
      return (isNaN(i)) ? null : i; 
     }; 
     $.tablesorter.formatFloat = function (s) { 
      var i = parseFloat(s); 
      return (isNaN(i)) ? null : i; 
     }; 
     $("#table").tablesorter(); 
    }); 

O ile mi wiadomo, moje rozwiązanie jest nieudokumentowane, ale działa dobrze.

+0

zadowolony, że to działa! Usuwanie mojej odpowiedzi, ponieważ nie działa. – ssell

+3

Po to, aby wiedzieć, rozwinąłem kopię [tablesorter na githubie] (http://mottie.github.com/tablesorter/docs/), aw najnowszej wersji automatycznie sortuje puste komórki tabeli na dół - [demo] (http://jsfiddle.net/Mottie/Z9wdn/13/) – Mottie

2

Z nowszymi wersjami wtyczki tablesorter jQuery można dodać inny rodzaj sortownika w nagłówkach, aby automatycznie umieścić puste/puste lub ciąg (jeśli na przykład wprowadzisz "-" zamiast wartości NULL), gdzie chcesz (Góra dół).

<th class="{'sorter': 'digit', 'string': 'bottom'}">Count</th> 

To jest sposób na umieszczenie go bezpośrednio w html/templates. Ale jeśli masz spójność w liczbie kolumn, możesz to zrobić w początkowej funkcji tablesorter.

$('table').tablesorter(
    headers: { 
     1: { sorter: "digit", empty : "top" }, 
     2: { sorter: "digit", string: "bottom"} 
    } 
) 

czy inaczej działa dobrze, ale to w zasadzie siły cokolwiek umieścić w drugim k, v obiektu nagłówka aby mieć pierwszeństwo przed sortowaniem w normalny sposób.

Więcej informacji można znaleźć w the tablesorter docs.

0

Jeśli to może pomóc komuś, oto jak to zrobiłem dla tekstu.

function emptyAtBottomTextSorter(a, b, direction, column, table) { 
    if (a == "") { 
     a = direction ? "ZZZZZ" : ""; 
    } 
    if (b == "") { 
     b = direction ? "ZZZZZ" : ""; 
    } 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
} 

$("#myTable").tablesorter({ 
    headers: { 
     1 : {'sorter' : 'text'} 
    }, 
    textSorter: { 
     1 : emptyAtBottomTextSorter 
    } 
}); 

Pracując z tablesorter v2.26.2

Powiązane problemy