Rolf B: Javascript Sortierfunktion

Beitrag lesen

problematische Seite

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