Du bist nicht angemeldet (anmelden)
Erledigt: jQuery Tablesorter mehrfach auf einer Seite
caZpa schrieb am 29.06.11, 10:27 Uhr:
Die Variable s wird komplett bereinigt gelieftert. D.h. es sind keine Tags mehr drin, deswegen wird das so nicht funktionieren. Jetzt gibt es 2 Möglichkeiten. Einmal den überflüssigen Linktext löschen. Dazu muss sichergestellt sein, dass keines der Wörter im relevanten Teil vorkommt.
Möglichkeit 2, den relevanten Teil filtern, sofern er immer gleiches Muster hat. In dem Beispiel oben ist das vorne 2 Buchstaben, danach 1-2 Zahlen, Punkt,3 Zahlen und manchmal Minus mit Buchstabe+Zahl.
Ich hatte sowieso noch 2 Fehler drin. Mit dem replacement ist das in js nicht so einfach wie in php mit Variablen. Hier braucht man eine callback Funktion. Das sah nur so aus als würde es funktionieren, weil die Buchstaben immer gleich waren. Replaced wurde aber immer nur der String $1
Falsch war außerdem, die Zeichen in Kleinbuchstaben zu wandeln, weil der Bereich bei 97 anfängt. Eine 99 für c wird dann ja nach dem Komma höher gewertet als 100 für d. Kurz, alles muss groß.
Quelltext in Zwischenablage kopieren
$.tablesorter.addParser({id: 'newsort',is: function(s) {return false;},format: function(s) {// variante 1//return s.toUpperCase().replace(/([^a-zA-Z0-9.]|data|sheet|product|details)/img, '').replace(/([a-zA-Z])/img, CharToAscii);// variante 2s = s.match(/w{2}d{1,2}.d{3}(:?-wd)?/img);return s[0].replace(/-/g, '').toUpperCase().replace(/([a-zA-Z])/g, CharToAscii);},type: 'number'});// callbackfunction CharToAscii(c){return c.charCodeAt(0)}
hmm das funktioniert leider nicht, da sich die Werte doch sehr unhomogen verhalten. manche Felder beinhalten auch längere Namen zbsp PISA10.241 Da steigt das script dann aus und die naechste Tabelle auf der Seite geht nicht mehr. Die vorherige Lösung ist schon ziemlich funktionabel, ich schau mir das mal in Ruhe an.
Editiert: 29.06.11, 16:29 Uhr
Die voherige Variante ist fehlerhaft. Entwerder Variante 1 im letzen Besispiel auskommentieren und die 2. löschen. Oder die 2. wie folgt änderns = s.match(/\w{1,}\d{1,2}\.\d{3}(?:-\w\d)?/img);
Bedeutet:
\w{1,} vorne mindestens ein Buchstabe
\d{1,2} danach 1-2 Zahlen
\. danach ein Punkt
\d{3} danach genau 3 Zahlen
(:?-\w\d)? danach ein Minus, ein Buchstabe und eine Zahl. Das ganze ein oder keinmal → ?
Das ?: vorne in der Klammer, speichert den Inhalt der Klammer nicht als Variable zur weiterverarbeitung
// es muss natürlich ?: sein und nicht :?. editiert
s = s.match(/\w{0,}\d{1,2}\.{0,}\d{0,}\w{0,}(?:-\w\d)?/img);
so, nachdem es an manchen stellen noch hakte: das da oben funktioniert. UND ich habe verstanden warum es so ist und konnte es nach deiner Anleitung anpassen. 1000 dank nochmal.
