Sortierfunktion



  • Moin,

    ich habe eine ganz einfache Sortierfunktion geschrieben für <li> Elemente, die ein <a> Element (Seitenzahl) enthalten.

    Doch irgendwas stimmt nicht, wenn ich erst nach Titel und dann nach Seite sortiere, sind die Seitenzahlen erst nach dem zweiten Sortierlauf aufsteigend.

    Ausschnitt aus einem Liederbuch:

    <button onclick="sortiereListeNachSeite('dieses');">sortiere nach Seite</button>
    <ul id=dieses>
    <li>Uhren-Kanon ♫ <a href="#lied_02">02</a></li>
    <li>Ich geh mit meiner Laterne ♫ <a href="#lied_03" target="_parent">03</a></li>
    <li>Shantymen sind very good ♫ <a href="#lied_04" target="_parent">04</a></li>
    </ul>
    In Datei sortiere_liste.js:

    function sortiereListeNachSeite ( id ) {
    var zahl1, zahl2, html;
    obj = document.getElementById( id ).getElementsByTagName( "LI" );
    for ( i=0; i<obj.length; i++ ) {
    zahl1 = "x" + obj[i].getElementsByTagName( "A" )[0].innerHTML; // Seitenzahl als string
    for ( j=i+1; j<obj.length; j++ ) {
    zahl2 = "x" + obj[j].getElementsByTagName( "A" )[0].innerHTML; // Seitenzahl als string
    if ( zahl2 < zahl1 ) {
    html = obj[i].innerHTML; // unteren sichern
    obj[i].innerHTML = obj[j].innerHTML; // oberen nach unten
    obj[j].innerHTML = html; // gesicherten nach oben
    i++;
    }
    }
    }
    }
    Wo ist der Fehler?



  • Pegas schrieb:

    Wo ist der Fehler?

    Der Fehler ist, dass Du Java und Javascript verwechselst.



  • Pegas schrieb:

    Moin,

    ich habe eine ganz einfache Sortierfunktion geschrieben für <li> Elemente, die ein <a> Element (Seitenzahl) enthalten.

    Doch irgendwas stimmt nicht, wenn ich erst nach Titel und dann nach Seite sortiere, sind die Seitenzahlen erst nach dem zweiten Sortierlauf aufsteigend.

    Ausschnitt aus einem Liederbuch:

    <button onclick="sortiereListeNachSeite('dieses');">sortiere nach Seite</button>
    <ul id=dieses>
    <li>Uhren-Kanon ♫ <a href="#lied_02">02</a></li>
    <li>Ich geh mit meiner Laterne ♫ <a href="#lied_03" target="_parent">03</a></li>
    <li>Shantymen sind very good ♫ <a href="#lied_04" target="_parent">04</a></li>
    </ul>
    In Datei sortiere_liste.js:

    function sortiereListeNachSeite ( id ) {
    var zahl1, zahl2, html;
    obj = document.getElementById( id ).getElementsByTagName( "LI" );
    for ( i=0; i<obj.length; i++ ) {
    zahl1 = "x" + obj[i].getElementsByTagName( "A" )[0].innerHTML; // Seitenzahl als string
    for ( j=i+1; j<obj.length; j++ ) {
    zahl2 = "x" + obj[j].getElementsByTagName( "A" )[0].innerHTML; // Seitenzahl als string
    if ( zahl2 < zahl1 ) {
    html = obj[i].innerHTML; // unteren sichern
    obj[i].innerHTML = obj[j].innerHTML; // oberen nach unten
    obj[j].innerHTML = html; // gesicherten nach oben
    i++;
    }
    }
    }
    }
    Wo ist der Fehler?

    Es könnte schwierig werden dass dir jemand hilft, ohne Code-Tags und ohne zu wissen in welcher Sprache du programmierst 😃



  • Ach ja,
    hab gesehen - kein Java Script.
    Aber warum gibt es hier keine Rubrik für die Sprache?


  • Global Moderator |  Mod

    Pegas schrieb:

    Aber warum gibt es hier keine Rubrik für die Sprache?

    PAsst hier:
    https://www.c-plusplus.net/forum/f31

    Für ein Forum speziell nur für Javascript besteht nicht genügend Interesse. Ja, klingt komisch für eine der gesuchtesten Sprachen derzeit, aber dieses Forum hier zieht eine andere Art von Programmierer an.



  • SeppJ schrieb:

    Pegas schrieb:

    Aber warum gibt es hier keine Rubrik für die Sprache?

    PAsst hier:
    https://www.c-plusplus.net/forum/f31

    Für ein Forum speziell nur für Javascript besteht nicht genügend Interesse. Ja, klingt komisch für eine der gesuchtesten Sprachen derzeit, aber dieses Forum hier zieht eine andere Art von Programmierer an.

    Klar, danke für die Hilfe;)
    kann ich dann meinen Beitrag ins Thread verschieben, das du mir gezeigt hast?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Java in das Forum Webzeugs verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Administrator

    Schwierig dir da zu helfen. Zum einen fehlt uns der Code zur Sortierung nach Titel. Zum anderen funktioniert dein Algorithmus für die Sortierung nach der Seitenzahl gar nicht. Wenn du mehr Elemente rein tust, kannst du das sehr gut erkennen:
    https://jsfiddle.net/sw8okbpt/5/



  • Dein Problem ist, dass du die Variable "i" an zwei Stellen erhöhst.
    Einmal in der ersten for-Schleife und einmal am Ende beim Tausch der Elemente.

    Jedes Mal, wenn ein Element mit einem anderen getauscht wird, wird also i erhöht, wodurch sich die Anzahl der Schleifendurchläufe der ersten for-Schleife entsprechend verringern.