Dreieckstausch von zwei Elementen in einem Array misslingt

Thomas D

Erfahrenes Mitglied
Hallo!

Ich habe einen sehr strangen Fehler beim Dreieckstausch von Array-Elementen.

Code:
var paras = document.getElementById("adminAuswahl").getElementsByTagName ("p");
var change = true;
var temp;

for (c=0; c<paras.length && change; c++)
{
    change = false;
    
    for (d=c; d<paras.length; d++)
    {
        if (getAbsoluteTop (paras[d]) < getAbsoluteTop (paras[ c]))
        {
            alert ("Before: " +paras[ c].firstChild.nodeValue +" " +paras[d].firstChild.nodeValue);

            temp = paras[ c]; //Dreieckstausch
            paras[ c] = paras[d];
            paras[d] = temp;

            alert ("After: " +paras[ c].firstChild.nodeValue +" " +paras[d].firstChild.nodeValue);
            change = true;
        }
    }
}

Trotz eines Dreieckstausches werden die Elemente nicht vertauscht (die Ausgabe "Before:" und "After:" werden ausgegeben, aber in beiden steht dasselbe drin ==> der Dreickstausch hat nicht hingehauen. Sehe nur ich den Wald vor lauter Bäumen nicht, oder was ist das sonst falsch :confused:

MfG, Thomas D.
 
Ohne das jetzt nachgestellt haben.... wo glaubst du, etwas auszutauschen?

paras ist ein Array, mehr nicht.
Durch tauschen der Array-Elemente änderst du noch lange nicht die Knotenstruktur des Dokumentes(falls du das vorhattest).
Dazu benutze die entsprechenden DOM-Methoden(cloneNode, replaceChild)
 
Ich möchte auch nur die Reihenfolge im Array ändern und nicht im Dokument. Im Dokument soll die Reihenfolge sogar gleich bleiben. Doch das mit dem Sortieren im Array will aus mir unerfindlichen Gründen irgendwie nicht klappen :( ...
 
Liefert den Abstand des Elements zum oberen Browserrand.

Code:
function getAbsoluteTop (element)
{
    return (element.offsetParent)?  element.offsetTop + getAbsoluteTop (element.offsetParent) : element.offsetTop;
}

Ist IMO aber eh egal, da es einfach um eine Vergleichsfunktion geht. Denn dass in das If reingegangen wird, sehe ich ja durch die beiden Alerts(), die leider genau gleich sind :( ...
 
Ich hab mir das mal nachgebaut, bei mir geht er da nicht hinein.:)

Könntest du mal erläutern, nach welchem Schema er Dreickstausch vonstatten gehen soll...ich werd da nicht schlau aus den beiden Schleifen :-(
 
Stimmt, dazu braucht es das ganze Script. Das ist allerdings ziemlich umfangreich - inkl. Datenbankanbindung, Drag & Drop, ...

Unter http://www.thomasd.info/gruenhoch3/tutorialsTest.php kannst du das ganze in einer abgespeckten Version austesten. Verschiebe dazu einfach einen der unteren Absätze nach oben und betätige den Button. Dann sollte "Before" und "After" zumindest im Firefox zu sehen sein.

BTW: Thx für dein Bemühen ;-)!
 
Wenn ich das so richtig sehe , sollte es sich hierbei um ein Bubblesort handeln.

Er läuft alle Elemente durch , in der inneren schleife vergleicht er alle Elemente mit den Element der äußeren Schleife.
Sollte nicht getauscht werden wird die obere Schleife nicht mehr ausgeführt.

Ich mein ich hab es mal mit 2 Werten getestet , da hat er getauscht habe aber auch die paras einfach einmal befüllt.
 
Zurück