turgar: td-Höhe auslesen

Hallo,

ich versuche mittels "test = document.getElementById(td).heigth;" die Höhe eines td's auszulesen, dessen id "td" lautet...

Leider bekomme ich, bei einer Ausgabe von test gar keinen String oder "undefined" zurück;

Was mache ich falsch?

  1. Hi,

    ich versuche mittels "test = document.getElementById(td).heigth;" die Höhe eines td's auszulesen, dessen id "td" lautet...

    Leider bekomme ich, bei einer Ausgabe von test gar keinen String oder "undefined" zurück;

    Was mache ich falsch?

    Du gehst irrtuemlicherweise von der Existenz von Eigenschaften aus, die durch Nichtexistenz glaenzen.

    offsetHeight kennen aber alle aktuellen Browser, und es ist auch ausserhalb des IE-spezifischen document.all-Kontextes anwendbar.

    MfG ChrisB

    1. Vielen Dank, das bestimmen der Höhe funktioniert nun;

      Allerdings ergibt sich dadurch wieder ein anderes Problem:
      Die linke Spalte einer Tabelle soll sich in Abhängigkeit von der Höhe rechten verändern;
      Zum Zeitpunkt des Ladens der linken Spalte steht aber die Höhe der rechten noch nicht fest.

      Wie kann man solche Schwierigkeiten umgehen?

      1. Hi,

        Die linke Spalte einer Tabelle soll sich in Abhängigkeit von der Höhe rechten verändern;
        Zum Zeitpunkt des Ladens der linken Spalte steht aber die Höhe der rechten noch nicht fest.

        Dann hast du eine reichlich seltsame Tabelle - und missbrauchst sie vermutlich zu Layout-Zwecken?

        (In einer bestimmungsgemaesz eingesetzten Tabelle, die also zur Auszeichnung tabellarischer Daten benutzt wird, kann ich mir kaum ein Szenario vorstellen, in dem Spalten unterschiedliche Hoehen haetten.)

        Wie kann man solche Schwierigkeiten umgehen?

        In dem man CSS fuer's Layout benutzt.

        MfG ChrisB

        1. Ja, es handelt sich um ein "Layouttabelle"...
          Css, ja, dass es damit keine Probleme geben würde ist mir klar...

          Problem ist nur:
          Der Einsatz von css ist in meinem Fall einfach mit viel zu viel Aufwand verbunden;

          Deshalb sollte die Lösung mittels Tabellen geschehen;

          1. Hi,

            Problem ist nur:
            Der Einsatz von css ist in meinem Fall einfach mit viel zu viel Aufwand verbunden;

            *Lern*aufwand deinerseits, meinst du?

            Wenn du den jedes Mal vor dir her schiebst, wirst du nie an den Punkt gelangen, wo du zeitgemaesze Webseiten zu erstellen in der Lage bist.

            Deshalb sollte die Lösung mittels Tabellen geschehen;

            Na dann, zurueck zu deinem "Problem":

            Die linke Spalte einer Tabelle soll sich in Abhängigkeit von der Höhe rechten verändern;
            Zum Zeitpunkt des Ladens der linken Spalte steht aber die Höhe der rechten noch nicht fest.

            Dann wirst du wohl darauf warten muessen, dass sie feststeht - per onload z.B.

            MfG ChrisB

            1. Zwecks "Aufwand":
              Nein, es geht nicht um meinen (Lern-)Aufwand, sondern um verschwendeten Aufwand;
              Der Besitzer der Seite möchte diese in ca. einem halben Jahr, zum Zeitpunkt einer größeren inhaltlichen Änderung, komplett überarbeiten;
              Bis dahin soll sie jedoch den momentan geschilderten Anforderungen entsprechen.

              Dann werde ich mich mal mit onload auseinandersetzen...

              Dank!

              1. So, nun habe ich das Ganze nochmals mit onload im body-tag und
                "window.onload = ermittleTdHoehe("linkerRahmen");" versucht.

                Netterweise ist die Höhe der linken Spalte mit 0.4 immer noch viel zu klein...

                1. Hi,

                  So, nun habe ich das Ganze nochmals mit onload im body-tag und
                  "window.onload = ermittleTdHoehe("linkerRahmen");" versucht.

                  Und dabei kam was heraus?
                  Kontrollausgabe ermittelter Werte, vergleich mit den Angaben bspw. aus FireBug, ...?

                  Netterweise ist die Höhe der linken Spalte mit 0.4 immer noch viel zu klein...

                  0.4 was?

                  MfG ChrisB

                  1. Hallo,

                    das seltsame ist, dass die Höhe der linken Spalte nicht stimmt.
                    Eine alert-Ausgabe in der mit onload aufgerufenen Funktion liefert bei der linken Spalte 0.4, bei der rechten jedoch die korrekte 467 als Höhe.

                    Im Moment sieht das für mich einfach danach aus, dass die onload-Funktion zu früh aufgerufen wird und die Tabelle zum Aufrufzeitpunkt noch nicht fertig geladen ist...

                    1. Im Moment sieht das für mich einfach danach aus, dass die onload-Funktion zu früh aufgerufen wird und die Tabelle zum Aufrufzeitpunkt noch nicht fertig geladen ist...

                      Falls du an Hilfe oder einer Lösung interessiert bist, wir sind keine Hellseher und können nicht anhand von Fragmenenten erraten was du tust.

                      Struppi.

                      1. Falls du an Hilfe oder einer Lösung interessiert bist, wir sind keine Hellseher und können nicht anhand von Fragmenenten erraten was du tust.

                        Wenn man mir sagt, welche Informationen nötig sind, kann ich Abhilfe schaffen.
                        Sonst bleibt nur die Kristallkugel...

                        1. Hi,

                          Falls du an Hilfe oder einer Lösung interessiert bist, wir sind keine Hellseher und können nicht anhand von Fragmenenten erraten was du tust.

                          Wenn man mir sagt, welche Informationen nötig sind, kann ich Abhilfe schaffen.

                          </hilfe/charta.htm#tipps-fuer-fragende>

                          Sonst bleibt nur die Kristallkugel...

                          Das ist *unsere* (Standard-)Antwort in solchen Faellen :-)

                          MfG ChrisB

                          1. Okay, dann machen wir die Sache konkreter...

                              
                             <body>  
                              
                               <!--Tabelle zum Ausrichten-->  
                               <table border="0">  
                                 <tr>  
                                  <!--Umrandung-->  
                                  <td id="linkerRahmen" width="4" valign="top">  
                                   <script type="text/javascript">  
                                    //ermittleTdHoehe("linkerRahmen");  
                                    window.onload = ermittleTdHoehe("linkerRahmen");  
                                   </script>  
                                  </td>  
                            <td>  
                            <!-- hier steht der dynamisch wachsende Ausgabeteil, in 3 Spalten untergliedert -->  
                            </td>  
                            <!--Umrandung-->  
                                  <td id="rechterRahmen" width="4" valign="top">  
                                   <script type="text/javascript">  
                                    //ermittleTdHoehe("rechterRahmen");  
                                    self.onload = ermittleTdHoehe("rechterRahmen");  
                                   </script>  
                                  </td>  
                            </tr>  
                            </table>  
                            
                            

                            Hier dann noch das aufgerufene Javascript:

                              
                            function ermittleTdHoehe(td)  
                            {  
                             var hoehe;  
                             //Hoehe bestimmen  
                             hoehe = document.getElementById(td).offsetHeight;  
                             //durch Hoehe des Bildes teilen  
                             hoehe = hoehe / 5;  
                              
                             alert(hoehe);  
                              
                             //Punkte ausgeben  
                             for(var i=0; i<hoehe; i++)  
                             {  
                              document.write("<img src=\"./gifs/orangerPunkt.png\" alt=\"punkt\"><br>");  
                             }  
                            }  
                            
                            

                            Sollten weitere Infos nötig sein, kann ich diese gerne zur Verfügung stellen...

                            Nebenbei: Kann man hier im Forum Postings editieren?

                            1. Okay, dann machen wir die Sache konkreter...

                              Na Also.

                              <script type="text/javascript">
                                      //ermittleTdHoehe("linkerRahmen");
                                      window.onload = ermittleTdHoehe("linkerRahmen");

                              Hier weist du dem Evenhandler den Rückgabewert der Funktion zu, wenn der Event eintritt, wird versucht diese Funktion aufzurufen, ich nehm aber an dass deine Funktion keine Funktionsreferenz zurück gibt.

                              Deine Schreibweise funktioniert nur, wenn die Funktion so aussieht:

                                
                              function ermittleTdHoehe(string) {  
                                 return function() {  
                                 /* ... */  
                                 }  
                              }  
                              
                              

                              einfacher wäre es, gleich eine anonyme Funktion zu benutzen:

                              window.onload = function() {  
                              ermittleTdHoehe("linkerRahmen");  
                              }
                              

                              Nebenbei: Kann man hier im Forum Postings editieren?

                              nein.
                              Struppi.

                              1. Vielen Dank,
                                jetzt bin ich schon einen ganzen Schritt weiter!