Tanja 21: Die Position zweier Elemente tauschen

Hallo zusammen,

ich möchte die Position zweier Elemente per Javascript tauschen.

Kann mir jemand sagen wie ich das mache...

Danke

  1.   
      function vertauschen()  
      {  
       var element1Top  = getElementById("element2").style.top;  
       var element1Left = getElementById("element2").style.left;  
      
       // Werte von Element 1 auf Element 2 zuweisen  
       getElementById("element2").style.top  = getElementById("element1").style.top;  
       getElementById("element2").style.left = getElementById("element1").style.left;  
      
       // Werte von Element 2 auf Element 1 zuweisen  
       getElementById("element1").style.top  = element1Top;  
       getElementById("element1").style.left = element1Left;  
      }  
    
    

    Wenn ich dich richtig verstanden habe.
    Die Top & Left werte werden hier beim Funktionsaufruf vertauscht.

    1. var element1Top  = getElementById("element2").style.top;
         var element1Left = getElementById("element2").style.left;

      Nein, so wirst du nicht die Position ermitteln können, dazu brauchst du offsetLeft/Top

      getElementById("element1").style.top  = element1Top;
         getElementById("element1").style.left = element1Left;

      Ohne Einheiten wird das i.d.R. keine Wirkung haben und FF sich entsprechend in der Fehlerkonsole beschweren.

      Struppi.

      1. Hallo,

        var element1Top  = getElementById("element2").style.top;
           var element1Left = getElementById("element2").style.left;

        Ohne Einheiten wird das i.d.R. keine Wirkung haben und FF sich entsprechend in der Fehlerkonsole beschweren.

        nein. in der Variable element1Top wird der Wert UND die einheit gespeichert:
        z.B. 15px

        deshalb kann man das auch ohne bedenken anwenden ...

        MfG. Christoph Ludwig

        --
        Wo die Sprache aufhört, fängt die Musik an...
        Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
        Go to this
        1. var element1Top  = getElementById("element2").style.top;
             var element1Left = getElementById("element2").style.left;

          Ohne Einheiten wird das i.d.R. keine Wirkung haben und FF sich entsprechend in der Fehlerkonsole beschweren.

          nein. in der Variable element1Top wird der Wert UND die einheit gespeichert:
          z.B. 15px

          Nein, die Variabel wird normalerweise leer sein.

          deshalb kann man das auch ohne bedenken anwenden ...

          deshalb sollte man das so nicht machen.

          Struppi.

          1. Hallo,

            Nein, die Variabel wird normalerweise leer sein.

            kann nicht sein, die Variable wird nur leer sein, wenn sie per CSS oder Javascript nicht vorher gesetzt wurde ...
            aber mach mal eine alert()-abfrage für ein Element... Du wurst sehen ;)

            MfG. Christoph Ludwig

            --
            Wo die Sprache aufhört, fängt die Musik an...
            Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
            Go to this
            1. Nein, die Variabel wird normalerweise leer sein.

              kann nicht sein, die Variable wird nur leer sein, wenn sie per CSS oder Javascript nicht vorher gesetzt wurde ...

              Ich sehe nicht wo in dem Code des OPs diese gesetzt wurde und falls du mit "per CSS" meinst, in einem Stylesheet, dann ist diese aussage falsch.

              aber mach mal eine alert()-abfrage für ein Element... Du wurst sehen ;)

              Auch durch ein alert() wird dieser wert nicht gesetzt.

              Struppi.

  2. ich möchte die Position zweier Elemente per Javascript tauschen.

    Das ist nicht so einfach, du musst erst die bestehenden Koordinaten auslesen. Damit du die auf verschiedene Art setzen kannst, musst du die berechneten Werte auslesen. Das geht in verschiedenen Browsern verschieden. Bzw. es gibt eine standardisierte Methode und eine Methode für den nicht-standardkonformen IE. Dabei hilft diese Funktion:

    function getCurrentStyle (element) {  
     if (window.getComputedStyle) {  
      return window.getComputedStyle(element, null);  
     } else if (element.currentStyle) {  
      return element.currentStyle;  
     }  
    }
    

    Sie gibt ein style-Objekt zurück, deren Eigenschaften die gegenwärtigen Werte wiedergeben (in <http://de.selfhtml.org/javascript/objekte/style.htm#style_eigenschaften@title=dieser Schreibweise>, darunter top und left).

    Die entsprechende Vertausch-Funktion:

    function vertauschen (e1, e2) {  
     var style = getCurrentStyle(e1);  
     var koordinaten1 = {  
      top : style.top,  
      left : style.left  
     };  
     style = getCurrentStyle(e2);  
     var koordinaten2 = {  
      top : style.top,  
      left : style.left  
     };  
     style = e1.style;  
     style.top = koordinaten2.top;  
     style.left = koordinaten2.left;  
     style = e2.style;  
     style.top = koordinaten1.top;  
     style.left = koordinaten1.left;  
    }
    

    Beispiel:

    CSS:

    #e1, #e2 {  
     margin:0;  
     position:absolute;  
     background-color:green;  
    }  
    #e1 {  
     top:150px;  
     left:150px;  
    }  
    #e2 {  
     top:400px;  
     left:400px;  
    }
    

    HTML:

    <p id="e1">element1</p>  
    <p id="e2">element2</p>
    

    JavaScript:

    window.onload = function () {  
     vertauschen(document.getElementById("e1"), document.getElementById("e2"));  
    };
    

    Mathias

  3. Hi,

    ich möchte die Position zweier Elemente per Javascript tauschen.

    Wirklich in der Darstellung, Position und Masze Pixel-genau ... oder nur genau so, als ob die Position beider Elemente im Quellltext vertauscht worden waere?
    In letzterem Falle koennte man sie einfach mit appendChild/insertBefore "umhaengen" (vor dem Umhaengen des ersten natuerlich dessen Vorgaenger-/Nachfolger-Element "merken", damit man anschliessend das zweite an dieser Position wieder einfuegen kann).

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“