Harald: sortierprogramm funktioniert nicht

Hallo @ all

Ich hoffe ihr könnt mir helfen, ich habe ein kleines JavaScript geschrieben, welches aber nicht funktioniert, ich weiß aber nicht genau warum.
Es sollte die Elemente mit einer bestimmten ID in verschiedene Reihenfolgen bringen.

Hier ist, was ich geschrieben habe:

<html>
<head>
<title>Test</title>

<script type="text/javascript">
<!--
var sort0 = new Array(0,1,2,3,4,5,6,7,8,9,10,11,12);
var sort1 = new Array(6,7,0,1,4,3,8,9,2,5,11,12,10);

function ABC() {
 var Wort = new Array();
 for(var i = 0; i < document.getElementById("li1").length; i++)
   Wort.push(document.getElementById("li1")[i].firstChild.nodeValue);
 for(i = 0; i < document.getElementById("li1").length; i++)
   document.getElementById("li1")[i].firstChild.nodeValue = Wort[sort0[i]];
 document.getElementById("Art").firstChild.nodeValue = "anders0";
}

function A() {
 var Wort = new Array();
 for(var i = 0; i < document.getElementById("li1").length; i++)
   Wort.push(document.getElementById("li1")[i].firstChild.nodeValue);
 for(i = 0; i < document.getElementById("li1").length; i++)
   document.getElementById("li1")[i].firstChild.nodeValue = Wort[sort1[i]];
 document.getElementById("Art").firstChild.nodeValue = "anders1";
}

//-->
</script>

</head>
<body>

<h1>Wort <span id="Art">alphabetisch von A bis Z</span></h1>

<ul>
<li id="li1">Aber</li>
<li id="li1">Betha</li>
<li id="li1">CCCCC</li>
<li id="li1">Dein-name</li>
<li id="li1">Enter</li>
<li id="li1">Fra</li>
<li id="li1">H</li>
<li id="li1">Ha</li>
<li id="li1">My</li>
<li id="li1">Return</li>
<li id="li1">Root</li>
<li id="li1">Waaa</li>
<li id="li1">Wort</li>
</ul>

<form name="Formular" action="">
<input type="button" name="abc" value="alphabetisch" onClick="ABC()">
<input type="button" name="a" value="anders" onClick="A()">
</form>

</body>
</html>

Wo liegt mein Fehler im Programm?

------------------------------
Mit freundlichen Grüßen: Harry

  1. Hallo @ all

    Tach

    Ich hoffe ihr könnt mir helfen, ich habe ein kleines JavaScript geschrieben, welches aber nicht funktioniert, ich weiß aber nicht genau warum.
    Es sollte die Elemente mit einer bestimmten ID in verschiedene Reihenfolgen bringen.

    Hier ist, was ich geschrieben habe:

    <ul>
    <li id="li1">Aber</li>
    <li id="li1">Betha</li>

    Biiiiiieeeeeeeeeeeeep. User Error!

    Werte des id-Attributs müssen dokumentweit eindeutig sein.
    id steht für identifier den selben Wert haben dürften, wären das ja keine identifier mehr, denn man könnte die Elemente nicht mehr eindeutig identifizieren.

    Wo liegt mein Fehler im Programm?

    Dein Fehler liegt im HTML, nicht im Programm.

    Andreas

    1. Werte des id-Attributs müssen dokumentweit eindeutig sein.
      id steht für identifier den selben Wert haben dürften, wären das ja keine identifier mehr, denn man könnte die Elemente nicht mehr eindeutig identifizieren.

      muß natürlich heißen:
      id steht für identifier. Wenn mehrere id den selben Wert haben dürften, wären das ja keine identifier mehr, denn man könnte die Elemente nicht mehr eindeutig identifizieren.

      1. Hallo Andreas,

        1. Danke für die Hilfe.
        2. Ich habe es ein wenig abgeändert, doch es funktioniert noch immer (schon wieder) nicht.
        Wo liegt diesmal mein Fehler?

        <html>
        <head>
        <title>Test</title>

        <script type="text/javascript">
        <!--
        var sort0 = new Array(0,1,2,3,4,5,6,7,8,9,10,11,12);
        var sort1 = new Array(6,7,0,1,4,3,8,9,2,5,11,12,10);

        function ABC() {
         var Wort = new Array();
         for(var i = 0; i < document.getElementById("sl").length; i++)
           Wort.push(document.getElementById("sl").childNodes[i].nodeValue);
         for(i = 0; i < document.getElementById("sl").length; i++)
           document.getElementById("sl").childNodes[i].nodeValue = Wort[sort0[i]];
         document.getElementById("Art").firstChild.nodeValue = "anders0";
        }

        function A() {
         var Wort = new Array();
         for(var i = 0; i < document.getElementById("sl").length; i++)
           Wort.push(document.getElementById("sl").childNodes[i].nodeValue);
         for(i = 0; i < document.getElementById("sl").length; i++)
           document.getElementById("sl").childNodes[i].nodeValue = Wort[sort1[i]];
         document.getElementById("Art").firstChild.nodeValue = "anders1";
        }

        //-->
        </script>

        </head>
        <body>

        <h1>Wort <span id="Art">alphabetisch von A bis Z</span></h1>

        <ul id="sl">
        <li>Aber</li>
        <li>B</li>
        <li>C</li>
        <li>D</li>
        <li>E</li>
        <li>f</li>
        <li>g</li>
        <li>hAber</li>
        <li>iAber</li>
        <li>j</li>
        <li>kAber</li>
        <li>l</li>
        <li>mAber</li>
        </ul>

        <form name="Formular" action="">
        <input type="button" name="abc" value="alphabetisch" onClick="ABC()">
        <input type="button" name="a" value="anders" onClick="A()">
        </form>

        </body>
        </html>

        --------------------
        Mfg: Harry

        1. Hi Harry

          1. Ich habe es ein wenig abgeändert, doch es funktioniert noch immer (schon wieder) nicht.

          Was genau funktioniert nicht?
          Ist die erzielte Sortierreihenfolge nicht so wie gewünscht?
          Kannst Du die Ergebnisse nach ABC() und A() posten?
          Und wie sollte das Ergebniss nach A() genau aussehen?

          Wenn Du zuerst A() aussführst, änderst Du die Reihenfolge der Elemente nach der Reihenfolgeanweisung in sort1. Falls Du anschliessend ABC() ausführst, wirst Du nichts verändern, da die Reihenfolgeanweisung in sort0 in der neuen Liste nicht ändert.
          Das Problem dürfte sein, dass du kein Rückgriff auf die ursprünglich alphabetische Sortierreihenfolge mehr hast. Und Du stellst die alphabetische Reihenfolge auch nicht mit einem Zeichenvergleich wieder her.

          Somit könntest Du nur mit einer zu sort1 absolut inversen Reihenfolgeanweisung in sort0 den Ursprungszustand wieder herstellen.

          Dies wird aber bei mehrfacher Anwendung der Funktionen ABC() und A() irgendwann unübersichtlich.

          Darum die Frage, wie soll es genau gehen?

          Grüsse
          Eisbär