Avatar billede kelleolsen Nybegynder
24. oktober 2009 - 16:40 Der er 7 kommentarer og
1 løsning

Tabel med sorter

Hejsa.

Jeg skulle lave en liste med en helt masse tal, som der skulle kunne sorteres i. Så jeg valgte at lave denne: http://hjemmesideskolen.dk/html/tabel.asp?id=tabsort

Men den sorterer ikke helt som jeg gerne vil have. Den sorterer mine tal forkert.

Den sorter fx sådan med disse tal:

0,00 kr.
149,00 kr.
19,00 kr.
199,00 kr.
299,00 kr.
30,00 kr.

Men sådan skal det ikke være. Den skal sortere efter efter hvor stort tallet er, istedet for det første tal. Sådan:

0,00 kr.
19,00 kr.
30,00 kr.
149,00 kr.
199,00 kr.
299,00 kr.

Hvordan det? Skal jeg ud og have fat i et helt andet script, eller hvad skal rettes i scriptet?
Avatar billede ebusiness Nybegynder
24. oktober 2009 - 21:16 #1
Dine tal er strenge, derfor bliver de sorteret alfabetisk.

Du skal bruge en tilpasset sorteringsfunktion.

Her har du en funktion som passer til dine strenge:

function vaerdiforskel(a,b){
    a=a.replace(/[^0-9\,]/g,'').replace(/\,/,'.').replace(/\,/g,'')
    b=b.replace(/[^0-9\,]/g,'').replace(/\,/,'.').replace(/\,/g,'')
    return a-b
}

Og så kan du bruge .sort(vaerdiforskel) til at sortere din liste.
Avatar billede ebusiness Nybegynder
24. oktober 2009 - 21:17 #2
Og det skulle have været et svar.
Avatar billede kelleolsen Nybegynder
24. oktober 2009 - 22:17 #3
Undskyld, men hvor skal det der sættes ind?
Avatar billede ebusiness Nybegynder
24. oktober 2009 - 22:50 #4
Du har ikke skrevet noget kode, så eksakt hvor det skal sættest ind kan jeg ikke sige.

Men altså, funktionen kan du bare sætte ind i starten af din script blok, og så kan du bruge den til at sortere at array således:

array.sort(vaerdiforskel)
Avatar billede kelleolsen Nybegynder
24. oktober 2009 - 22:59 #5
Vil du ikke være rigtig flink og prøve at downloade scriptet fra http://hjemmesideskolen.dk/html/tabel.asp?id=tabsort ? Også fortælle hvor det skal sættes ind. Både funktionen og array.sort(vaerdiforskel) skal vil begge sættes ind i scriptet, og ikke på html siden?
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 00:04 #6
Ok, nu forstår jeg hvad der foregår. Det er vist ikke kvalikode du har fundet der, der er i hvert fald både fejl og mangler.

ts_sort_currency skal rettes før den kan bruges:

function ts_sort_currency(a,b) {
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9\,]/g,'').replace(/\,/,".");
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9\,]/g,'').replace(/\,/,".");
    return parseFloat(aa) - parseFloat(bb);
}

Og så skal detektionsmekanismen tilpasses:

Efter
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
indsætter du
if (itm.match(/kr/)) sortfn = ts_sort_currency;

Det gør ikke funktionen god, det gør blot at den kan bruges i dit tilfælde, hvis den ellers i øvrigt virker.
Avatar billede tjens Nybegynder
25. oktober 2009 - 23:46 #7
Et alternativ til sortering af data via javascript er XSLT.

Det kan sortere data ved en simpel definition:
  <xsl:sort select="stemmer" order="descending"  data-type="number"/>
   

Og definitionen kan manipuleres med javascript, så programmering af sortering helt undgås:
    sort[0].setAttribute('order', 'ascending');
    sort[0].setAttribute('select', newSort);
    sort[0].setAttribute('data-type', newType);

Du kan teste det her:
http://tjens.dk/eksperten/xsl03/showvotes.html

Data skal være defineret som xml:
http://tjens.dk/eksperten/xsl03/votes.xml

Og selve HTMLen dannes ved at xml-data transformeres med xsl:
http://tjens.dk/eksperten/xsl03/votes.xsl

Bemærk at xsl også kan tusindtals-formattere beløb.

Hovedparten af filen showvotes.html er så javascript til styring af selve indlæsningen af de 2 filer med xml og xsl (højreklik på siden fra første link for at se koden)
Avatar billede kelleolsen Nybegynder
26. oktober 2009 - 06:47 #8
Nice, tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester