Warum funktioniert das auslesen per document.getElementById() bei div1 und bei div3.html document.getElementById()...style.left nicht?
Er funktioniert nicht! Zumindest nicht auf die Weise, die du dir vorstellst.
Was du da tust: Du legst eine Variable an namens oldbgcol. Der weist du einen Wert zu, indem du .style.backgroundColor abfragst. Diese Eigenschaft liefert dir aber einen leeren String zurück. (Probiere es mal aus: Lass dir die Variable mit alert() ausgeben.) Also könntest du genauso schreiben oldbgcol = "", das hätte genau denselben Effekt.
Wenn du nun die "alte" Farbe wiederherstellst, dann stellst du nicht wirklich die alte Farbe wieder her, denn der String ist wie gesagt leer. Aber indem du .style.backgroundColor = "" notierst (denn darauf läuft es letztlich hinaus), löscht du den vorher gesetzten Inline-Style.
Sprich, die background-color-Formatierung über das style-Objekt ist wieder rückgängig gemacht. Wenn das passiert ist, dann wirken wieder alle anderen Formatierungen, die du mit der style-Zuweisung überschrieben hattest.
Du hast also ohne dein Wissen eine Möglichkeit gefunden, wie du gesetzte Inline-Styles wieder löschen kannst - nämlich indem du einfach .style.backgroundColor = "" notierst.
Also: In dem Fall brauchst du den vorherigen background-color-Wert nicht unbedingt. Wenn du jetzt aber so Sachen machen willst wie in div3.html, brauchst du sehr wohl den vorherigen aktuellen Wert der Eigenschaft "left".
Das sind einfach zwei unterschiedliche Aufgaben, die eine kannst du ohne getComputedStyle lösen, die andere nicht.
Mathias