Dreieckstausch von zwei Elementen in einem Array misslingt

Geht auch nicht :-(

Mal ganz vorsichtig nachgefragt...das, was du dort vorhast, machst du das, weil du es brauchst, oder weil du es machen willst..also das Sortieren.

Dies Rad wurde nämlich schon erfunden, scriptacolous kann dir da eine Menge Zeit sparen,
du findest dort sortierbare Container und Baumstrukturen mit Drag&Drop und allem was das Herz begehrt :)
 
Nein ich brauche das schon. Der User kann mit dem Anordnen der einzelnen <p>-Tags die Reihenfolge der Elemente ändern und diese im Anschluss im XML-Dokument updaten lassen. Aus diesem Grund brauche ich die Sortierung nach vertikaler Position.

Dass es bei dir nicht t, wundert mich doch sehr. Ich habe es nun sowohl in Opera 9.25 als auch in Firefox 2 ausgetestet (s. http://www.thomasd.info/temp/Screenshot.jpg).
 
Dann schau dir mal dies an :
http://wiki.script.aculo.us/scriptaculous/page/print/SortableListsDemo

Die Elemente werden nicht nur optisch, sondern auch in der Knotenstrukur verschoben, du musst diese also nur noch, wenn alles fertig ist, auslesen und zum Speichern verschicken :)

Werde ich mir morgen anschauen, um zu sehen, ob es sich auszahlt den bereits geschrieben Code durch ein entsprechendes Template auszutauschen. Bin derzeit einfach zu müde dazu ;) ...

Hat jetzt übrigens auch bei mir geklappt, ich habe das "über" als "drauf" interpretiert und nicht als "oberhalb drüber"

Und kannst du dir dadurch erklären, warum es nicht zur Sortierung kommt bzw. "Before" und "After" ein und dieselben Ausgaben liefern :confused: ? ...
 
Also ich habe das ganze jetzt so gelöst, dass ich alle relevanten Daten des Nodes in einem temporären assoziativen Array gespeichert habe. So funktioniert das ganze dann einwandfrei. Offensichtlich können Arrayelemente, die auf Dokumentnodes direkt zugreifen nicht in einem Array ausgetauscht werden.

Code:
var tempArr = new Array ();

for (c=0; c<paras.length; c++)
{
    tempArr[ C] = new Object ();
    tempArr[ C]["top"] = getAbsoluteTop (paras[ C]);
    tempArr[ C]["left"] = paras[ C].style.left.replace ("px", "");
    tempArr[ C]["id"] = paras[ C].id;
    tempArr[ C]["class"] = paras[ C].className;
}

for (c=0; c<tempArr.length && change; c++)
{
    change = false;
    
    for (d=c; d<tempArr.length; d++)
    {
        if (tempArr[d]["top"] < tempArr[ C]["top"])
        {
            temp = tempArr[ C]; //Dreieckstausch
            tempArr[ C] = tempArr[d];
            tempArr[d] = temp;
            
            change = true;
        }
    }
}

MfG, Thomas D.
 
Zurück