Wenn man bei deinem Vorgehen bleiben will, solltest Du es wie folgt machen, das ist ein echter Selection Sort.
Weitere Korrektur: Die äußere Schleife muss nur bis i<length-1 laufen, weil für i=length-1 die innere Schleife null Durchläufe macht.
Weiterer Vorschlag: querySelector statt getElementsByTagName, der liefert kein Array sondern einfach den ersten Match. Der Lesbarkeit halber sollte man das in eine Funktion auslagern.
function sortiereListeNachSeite ( id ) {
var zahl1, zahl2, jMin, html;
obj = document.getElementById( id ).getElementsByTagName( "LI" );
for ( i=0; i<obj.length-1; i++ ) {
zahl1 = getLiedNummer(obj[i]); // Seitenzahl als string
jMin = i; // Nimm an dass Minimum an Pos. i steht.
// Durchsuche Rest der Liste nach kleineren Liednummern, merke Pos. der kleinsten in jMin
for ( j=i+1; j<obj.length; j++ ) {
zahl2 = getLiedNummer(obj[j]); // Seitenzahl als string
if ( zahl2 < zahl1 ) { // An Pos. j eine kleinere Nummer als bisheriges Minimum
zahl1 = zahl2; // -> als neues Minimum setzen und Pos. speichern
jMin = j;
}
}
// Wurde oberhalb von i ein kleinerer Wert gefunden -> Pos. i, jMin tauschen
if (jMin > i) {
html = obj[i].innerHTML;
obj[i].innerHTML = obj[jMin].innerHTML;
obj[jMin].innerHTML = html;
}
}
}
// Liefert Liednummer aus dem Link-Text
function getLiedNummer(entry) {
return "x" + entry.querySelector("a").innerHTML;
}
Rolf
--
sumpsi - posui - clusi
sumpsi - posui - clusi