thomas uhde: getElementByID

Hallo.

folgendes Problem:
Bei geschachtelten Tabellen liefert mir die Funktion getElementByID(id) im IE Werte der übergeordneten Tabelle, wenn ich die ID der untergeordneten angebe. Bsp:

<table ...>
<tr>
  <td>
  <table ...>
  <tr>
    <td id="col1"></td>
  </tr>
  </table
  </td>
</tr>
</table>

gib getElementByID('col1') Werte der ersten Tabelle (bspw. Abstand zum linken Seitenrand).
Wenn ich keine geschachtelten Tabellen verwende funktioniert alles.

Danke.

tuh

  1. Hallot homas

    gib getElementByID('col1') Werte der ersten Tabelle (bspw. Abstand zum linken Seitenrand).
    Wenn ich keine geschachtelten Tabellen verwende funktioniert alles.

    Wie hast du den Abstand bestimmt?

    Schau dir mal Position abfragen an.

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Positionsabfrage wird mit folgender Funktion gemacht (funktioniert tadellos bei nichtgeschachtelten Tabellund und Firefox :o) )

      function getX(id) {
          var e = document.getElementById ? document.getElementById(id) : document.all ? document.all[id] : document.layers[id];
          //var e = jahiaGetObject(id);
          x = getPageOffsetLeft(e);
          // adjust position for IE
          if (browser.isIE) {
              x += e.offsetParent.clientLeft;
          }
          return x;
      }

      1. Hallo thomas

        Positionsabfrage wird mit folgender Funktion gemacht (funktioniert tadellos bei nichtgeschachtelten Tabellund und Firefox :o) )

        Der gibt ja auch direkt die Position zurück.

        ...
            // adjust position for IE
            if (browser.isIE) {
                x += e.offsetParent.clientLeft;

        Hiermit hast du dann zur Position deines Objekts zu seinem Parent die
        Position dieses zu seinem addiert.
        Welches Element ist denn nun aber der Parent von <td id="col1"></td>?
        Welches der Parent davon?
        Ist das bereits <html>, oder gibt es noch etwas dazwischen?
        Schau dir noch einmal Position abfragen an!

        Auf Wiederlesen
        Detlef

        --
        - Wissen ist gut
        - Können ist besser
        - aber das Beste und Interessanteste ist der Weg dahin!
        1. selbes Problem mit der Funktion aus dem älteren Thread.

          in beiden Browsern wird die while-Schleife 5 mal durchlaufen, nur sehen die Ergebnisse unterschiedlich aus (Firefox gibt den richtigen x-Wert und der IE "10".

          ich tippe auf folgende Durchläufe:
          -Zelle
          -Tabelle
          -Zelle
          -Tabelle
          -Body

          1. Hallo thomas

            in beiden Browsern wird die while-Schleife 5 mal durchlaufen, nur sehen die Ergebnisse unterschiedlich aus (Firefox gibt den richtigen x-Wert und der IE "10".

            Das kann ich jetzt nich nachvollziehen. Ich habe es extra nocheinmal getestet.
            Bei mir gaben sowohl Mozilla als auch IE den gleichen Wert (mit ein bis zwei
            Pixeln Differenz) zurück.
            Kannst du mal deine Testseite online stellen, damit wir das nachvollziehen können?

            Auf Wiederlesen
            Detlef

            --
            - Wissen ist gut
            - Können ist besser
            - aber das Beste und Interessanteste ist der Weg dahin!
            1. http://webtec24.de/top.htm
              das Script liegt in http://webtec24.de/menu.js

              Firefox gibt die linke obere Ecke des Elements, deswegen wird bei getY noch 17 addiert. Im IE bekomme ich wieder die linke obere Tabellenecke der übergeordneten Tabelle.

              Danke für die Mühe.

              Thomas

              1. Hallo Thomas

                Firefox gibt die linke obere Ecke des Elements, deswegen wird bei getY noch 17 addiert. Im IE bekomme ich wieder die linke obere Tabellenecke der übergeordneten Tabelle.

                Ich habe zum Test als letztes in den body von http://webtec24.de/top.htm

                  
                <br>  
                <br>  
                <br>  
                <br>  
                <a href="#" onclick="test('menu1');return false;">Hier Klicken</a>  
                
                

                eingefügt.
                Wenn ich auf den Link klicke gibt mir der Mozilla 249, 101 zurück,
                mein IE 251, 108. Diese Werte dürften stimmen.
                In das Menüscript habe ich mich allerdings nicht weiter vertieft, warum dieses
                beim IE eine falsche Position verwendet, weiß ich also zumindest im Moment noch
                nicht.
                Jetzt werde ich auch erstmal nicht weitersuchen.

                Auf Wiederlesen
                Detlef

                --
                - Wissen ist gut
                - Können ist besser
                - aber das Beste und Interessanteste ist der Weg dahin!
              2. Hallo Thomas

                Firefox gibt die linke obere Ecke des Elements, deswegen wird bei getY noch 17 addiert. Im IE bekomme ich wieder die linke obere Tabellenecke der übergeordneten Tabelle.

                Es hat mir keine Ruhe gelassen, habe doch noch einmal reingesehen.
                Das Problem ist, dass die Menüs zu einem Zeitpunkt angelegt werden, zu dem die
                Tabellen noch nicht fertig gerendert sind.
                Damit werden falsche Positionen gespeichert und dann auch weiterverwendet.

                Du musst dafür sorgen, dass new ypSlideOutMenu(... erst ausgeführt wird, wenn
                die Tabellen fertig gerendert sind.

                Auf Wiederlesen
                Detlef

                --
                - Wissen ist gut
                - Können ist besser
                - aber das Beste und Interessanteste ist der Weg dahin!
                1. Hallo Thomas,

                  noch ein Nachtrag:

                  Hast du dir auch Gedanken darüber gemacht, was Besucher zu sehen bekommen, bei
                  denen kein Javascript aktiviert ist?
                  Hast du dir die Seite und die Funktion einmal angesehen, wenn der Benutzer eine
                  größere Schrift eingestellt hat?

                  Auf Wiederlesen
                  Detlef

                  --
                  - Wissen ist gut
                  - Können ist besser
                  - aber das Beste und Interessanteste ist der Weg dahin!