Domanda

Ecco il mio problema,

Attualmente sto usando la tabella JQuery Sorter e ho trovato un parser Comma cifre sul web. Il problema che sto avendo è che non sembra funzionare.

Così qui è quello che la colonna è ordinata come:

  1. 4666
  2. 141.666
  3. 293
  4. 341.666
  5. 346
  6. 461.676

Questo dovrebbe essere ordinato come

  1. 293
  2. 346
  3. 4666
  4. 141.666
  5. 341.666
  6. 461.676

Il parser che sto usando è questo:

$( function() { 

    $.tablesorter.addParser({
        id: "fancyNumber",
        is: function(s) {
            return /^[0-9]?[0-9,\.]*$/.test(s);
        },
        format: function(s) {
            return $.tablesorter.formatFloat(s.replace(/,/g, ''));
        },
        type: "numeric"
    });
}); 

io proprio non lo so sto facendo male. Sto caricando sbagliato? È il parser che non va? Ho bisogno di aiuto reale qui e sono stato alle prese con questo problema per un po 'di tempo.

Modifica A causa di come genero mie colonne e le colonne permesso di essere scelto dall'utente, io so mai quale intestazione è in e non. Ho provato con il class = "{sorter: 'fancyNumber'}" di comando come indicato qui: http://tablesorter.com/docs/example-meta-parsers.html

** Edit: ** Sembra che una delle colonne funziona correttamente, ma questa colonna continua ad avere problemi. forse perché ha cifre e separati da virgola cifre?

È stato utile?

Soluzione

Per tutti coloro che si imbatte in questa domanda. Ho dovuto aggiungere la classe al mio riga di intestazione. Quindi per qualsiasi intestazione che ho voluto sorta di fantasia, ho aggiunto questa classe:

<th class=\"{sorter: 'fancyNumber'}\">

Questa accese la selezionatrice di default, che ha reso il lavoro piacevole.

Quello che mi ha fatto capire il mio errore nelle mie vie stava accendendo il debugger in questo modo.

$("#tblInfo").tablesorter({debug:true, widgets: ['zebra'], widgetZebra: { css: ['d0', 'd1']} });

Altri suggerimenti

Questo può succedere anche se si dimentica di includere il plugin metadati

** Pubblicato qui dal momento che questo è stato il primo risultato di ricerca su Google.

qui quello che ho fatto:

$(document).ready(function() {
      $.tablesorter.addParser({
        id: 'fancyNumber',
        is:function(s){return false;},
        format: function(s) {return s.replace(/[\,\.]/g,'');},
        type: 'numeric'
    });
    $("table").tablesorter({headers: {0: {sorter: 'fancyNumber'}}});
});

lavorato con virgola e il separatore punto.

http://jsbin.com/equci5

ho trovato una soluzione che ha funzionato per me. Nelle tablesorter.js, modificare il FormatFloat) funzione (come segue:

this.formatFloat = function (s) {
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

Questo sostituirà le virgole che erano interferiscono con l'ordinamento. Trovato la risposta href="https://forum.jquery.com/topic/tablesorter-plugin-wrong-sort-with-thousands-separators" qui . Spero che questo aiuti ...!

Prova esplicitamente assegnando il parser nella dichiarazione .tablesorter ().

.tablesorter( { headers: { 0: { sorter:'fancyNumber' } }); 

Vedere la fonte

Come ha detto Jared, è necessario specificare quale colonna utilizza quale Parser, se non si conosce l'indice della colonna, allora si può trovare il nostro utilizzo di questo:

var fancyIndex = $('th.fancyColumn').prevAll().length
var headers = {};
headers[fancyIndex] = {sorter:'fancyNumber'}

$("table").tablesorter({headers:headers})

I, provo questa espressione regolare:? / (\ D {1,3}) (\, \ d {3}) * /

Il parser guardano solo alla prima riga tbody a rilevare che parser da utilizzare. Sto cercando di indovinare la prima riga non ha virgole in esso. Ho incontrato lo stesso problema, e, infine, solo costretto il parser che volevo, utilizzando class = "{sorter: 'fancyNumber'}"

Sei completamente corretto che il parser dovrebbe essere di lavoro, la ragione non è è dovuto a un bug nel plugin. In breve il plugin pensa di poter ordinare i numeri con le virgole in modo corretto, e quindi utilizza il suo costruito nel sorter, ma poi non riesce a risolvere in modo corretto.

Ci sono alcuni modi per risolvere il problema.

In primo luogo è possibile (come lei ha suggerito sopra) forzare l'uso della funzione di ordinamento (o nella o nelle javascript inizializzazione del plugin).

In secondo luogo è possibile modificare il plugin per utilizzare le funzioni di preferenza al proprio, ciò può essere ottenuto invertendo la direzione del ciclo for on line 220 del plugin.

In terzo luogo si può risolvere il default rotto l'ordinamento comportamento modificando sia la funzione di rilevamento cifre di non accettare le virgole (linea 861 del plugin) o modificando il numero predefinito selezionatrice per gestire le virgole (linea 852 del plugin).

Ho sollevato la questione nella pagina di Google Code tablesorter: http: //code.google.com/p/tablesorter/issues/detail?id=6

ho trovato una soluzione che ha funzionato per me. Nelle tablesorter.js, modificare la funzione FormatFloat () come segue:

this.formatFloat = function (s) {
            s = s.toString();
            var i = parseFloat(s.replace(/[,]/g, ''));
            return (isNaN(i)) ? 0 : i;
        };

Questo sostituirà le virgole che erano interferiscono con l'ordinamento. Trovato la risposta qui. Spero che questo aiuti ...!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top