Bernhard: Per Javascript das DOM verändern

Hallo Forum,

ich habe ein echtes Problem mit meinem Javascript Code. Ich Benutze Typo3 (Content Management System) welches mir eine Seite mit einem  LayerMenu generiert. Dieses Menü funktioniert auch wunderbar. Nun möchte ich meine Seite aber Zentriert darstellen, da Typo3 diese Möglichkeit leider nicht bietet habe ich  einfach ein kleines Javascript geschrieben was um die gesamte Seite einen DIV-Tag packt. Der DIV-Tag wird dann per CSS zentriert und die Seite damit auch.

Das JS-Stückchen:
document.getElementsByTagName("body")[0].innerHTML = " <div id="zentrierung"> "+ document.getElementsByTagName("body")[0].innerHTML + "</div>";

Problem: Nachdem ich das gemacht habe funktioniert das Layer Menü nicht mehr richtig. Es treten ereignisreihenfolgen auf die ohne das zentrieren nicht auftretet und das Menü verschwindet nicht mehr wenn man mit der Maus den Menubereich verlässt. Ein ähnliches Phänomen hatte ich mal mit einem Ticker der nach dem zentrieren nicht mehr tickern wollte. Kann mir jemand sagen warum Javascript Probleme damit hat wenn ich den Body erweitere?

Danke im Voraus für Eure Hinweise
Bernhard

  1. Hallo,

    tritt das Problem auch auf, wenn du den Inhalt "von Hand" in das DIV legst?

    Das JS-Stückchen:
    document.getElementsByTagName("body")[0].innerHTML = " <div id="zentrierung"> "+ document.getElementsByTagName("body")[0].innerHTML + "</div>";

    ^ hier besser "</div>"

    Und noch eine Anmerkung zu innerHTML: es gehört nicht zum DOM-Standard, wird aber von den meisten (allen?) neuen Browsern unterstützt. Ich hatte aber mal einen Fall, da führte der Einsatz von innerHTML beim IE unter MAC-OS zum Browserabsturz. Und der IE ist gerade bei älteren MACs sehr beliebt. Daher würde ich an einer so zentralen Stelle mit innerHTML vorsichtig sein.

    Gruß, Jürgen

    1. Hallo, Jürgen

      tritt das Problem auch auf, wenn du den Inhalt "von Hand" in das DIV legst?

      nein, dann ist alles wunderbar. Das Problem kommt erst wenn ich es per Javascript einfüge. Was kann ich denn anderes ale innerHTML verwenden?

      Gruß
      Bernhard

      1. Hallo,

        tritt das Problem auch auf, wenn du den Inhalt "von Hand" in das DIV legst?

        nein, dann ist alles wunderbar. Das Problem kommt erst wenn ich es per Javascript einfüge.

        dann solltest Du den kleinen JS-Fehler beheben.
        Kann es sein, das das Script aufgerufen wird, bevor die Seite ganz geladen ist? Ruf es mal über den "onload" im Body auf.

        Was kann ich denn anderes ale innerHTML verwenden?

        Du müsstest Dich mit den DOM-Methoden durch den DOM-Baum hangeln und alle Äste behandeln. Evtl. wären cloneNode und appendChild die richtigen Werkzeuge. Das wird aber nicht einfach.
        Du kannst aber auch prüfen, ob ein MAC-IE da ist, und in diesem Fall auf das Zenrieren verzichten.

        Beispiel für MAC-IE-Test:
         var uA=navigator.userAgent.toLowerCase();
         var IE = uA.indexOf("msie");
         var MAC= uA.indexOf("mac");
         if ((IE>-1)&&MAC>-1) MACIE=true; // Der MAC-IE hat Probleme mit innerHTML

        Gruß, Jürgen