2016-06-21 4 views
1

Ich versuche, einige Daten einer Tabelle zu formatieren, die ständig von ajax aktualisiert wird.Sortieren und Formatieren mit TableSorter

Ich möchte, dass die Schwimmer Daten dieses

1.100.500,00 (Währung) werden

, nachdem ich es sortieren.

Das Problem ist, tablesorter sortiert nur die Float-Werte korrekt, wenn sie im ersten Format vorliegen. Was ich tun muss, ist:

  1. Wenn ajax lädt die Daten, zeigen Sie es wie (Währung), als Währung.
  2. Wenn Sie auf table <th> klicken, um Daten zu sortieren, entfernen Sie das Währungsformat (Währung) und sortieren Sie die Daten korrekt.
  3. Nach korrekt sortiert, formatieren Sie die Daten wie (Währung), als Währung.

Ich habe bereits versucht, dieses :(, die ich gefunden habe, dass es die Lösung für viele Fragen hier in SO)

$.tablesorter.addParser({ 
     // set a unique id 
     id: 'thousands', 
     is: function(s) { 
      // return false so this parser is not auto detected 
      return false; 
     }, 
     format: function(s) { 
      // format your data for normalization 
      return s.replace('.','').replace(/,/g,''); 
     }, 
     // set type, either numeric or text 
     type: 'numeric' 
     }); 


     $("#table_1").tablesorter({ 
      headers: { 
       2: {//zero-based column index 
        sorter:'thousands' 
       } 
      } 
    }); 

aber es funktioniert nicht ist.

Irgendwelche Ideen? Vielen Dank.

Antwort

1

Es gibt vier Dinge, die (demo) Fixieren:

  1. Die Funktion Perioden ersetzen wird nur eine entfernen. Also ändern Sie es in .replace(/\./g, "") (der Zeitraum muss auch maskiert werden).
  2. Entfernen Sie die $ aus dem String
  3. die , mit einem Komma ersetzen, so dass der Wert korrekt analysiert wird.
  4. Konvertieren Sie den Wert von einer Zeichenfolge in eine Zahl mithilfe der integrierten $.tablesorter.formatFloat-Funktion.

    $.tablesorter.addParser({ 
        id: 'thousands', 
        is: function(s) { 
        return false; 
        }, 
        format: function(s) { 
        var number = s.replace(/\$/g, '').replace(/\./g, '').replace(/,/g, '.'); 
        return $.tablesorter.formatFloat(number); 
        }, 
        type: 'numeric' 
    }); 
    $(function() { 
        $("table").tablesorter({ 
        theme: 'blue', 
        headers: { 
         0: { 
         sorter: 'thousands' 
         } 
        } 
        }); 
    }); 
    

Die Demo ich meine fork of tablesorter geteilt verwendet, aber der Code wird auch in der Originalversion wie erwartet.

+0

Ich werde versuchen, die Ergebnisse zu erzählen – Lioo

+0

Hallo, habe ich den Code aktualisiert, aber es hat nicht funktioniert :(. Eine Sache, die ich nicht in Ihrer Fiddle verstanden hat, ist, dass die Werte auf Ihrem HTML bereits in dem Format sind Ich möchte (999.999,99), nicht in dem Format, das ich derzeit empfange (999999.99). ** EDIT ** wopes my bad. Der Code, den Sie übergeben haben, ist ein Parser, der bereit ist, die Werte in diesem Währungsformat zu empfangen, richtig ? – Lioo

+0

Testete es wieder richtig, Ihre Antwort funktionierte. Vielen Dank! – Lioo