Harlequin: aktuelle Breite einer Tabellenzelle im IE ermitteln

Yerf!

Ich steh hier grad vor einem Problem:

Ich benötige die aktuelle Breite einer Tabellenzelle, um diese per JS an einer anderen Tabellenzelle zu setzen (mittels cell.style.width = ...).

Das Problem ist: die Breiter der Zelle ergibt sich durch ihren Inhalt, das führt zu folgendem:

1. originalCell.style.width ist nicht gestzt (es gibt kein Style-Attribut)
2. window.getComputedStyle(...) funktioniert im FF super, aber nicht im IE 6
3. currentStyle.width liefert 'Auto', damit hat er zwar irgendwie recht, bringt mich aber nicht weiter.
4. .offsetWidth liefert die Breite inklusive Padding und Border, der IE ist am nicht im Quirksmode, das heißt, der Wert bringt mich erst mal auch nicht weiter.

Hm, ich könnte natürlich Padding und Border jeweils für Links und Rechts ermitteln und von der offsetWidth abziehen... aber geht das nicht einfacher?

Das ganze wird in ner Schleife über ne recht große Tabelle laufen... ich fürchte um die Performance.

Gruß,

Harlequin

--
<!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  1. Hi,

    Ich benötige die aktuelle Breite einer Tabellenzelle, um diese per JS an einer anderen Tabellenzelle zu setzen (mittels cell.style.width = ...).

    1. window.getComputedStyle(...) funktioniert im FF super, aber nicht im IE 6

    Ich hatte mal fast das gleiche Problem.
    Geholfen hat mir dann diese Funktion.

    mfG,
    steckl

    1. Yerf!

      Ich hatte mal fast das gleiche Problem.
      Geholfen hat mir dann diese Funktion.

      Die Postings hab ich vorhin bei der Suche schon gesehen. Das Problem ist, dass diese Lösung im IE mit currentStyle arbeitet. Das geht nur dann, wenn eine explizite Breite im CSS angegeben ist. Bei mir ist diese aber 'Auto', weshalb ich auch diesen String zurückbekomme und nicht eine Breite in Pixel (so wie ich es vom FF mittels getComputedStyle bekomme).

      Momentan behelf ich mir mit der Rechnung über offsetWidth, aber 5 Eigenschaftszugriffe plus 4 parseFloat für etwas, dass beim FF mit nur einem Zugriff geht... mal schauen, was passiert, wenn ich das auf meine echten Tabellen loslasse (ich teste im Moment nur mit einer kleinen).

      Gruß,

      Harlequin

      --
      <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. Yerf!

    Hm, ich könnte natürlich Padding und Border jeweils für Links und Rechts ermitteln und von der offsetWidth abziehen... aber geht das nicht einfacher?

    Ich hab zwar noch keine bessere Lösung gefunden, aber über den Umweg gehts zumindest schon mal im IE... ide Performance muss ich noch austesten.

    Allerdings hab ich jetzt noch ein anderes Problem:

    Mein geliebter Opera kann zwar mit getComputedStyle umgehen, liefert aber schwachsinnige Werte... Die ausgelesene width entspricht dort der offsetWidth (die ja eigentlich Padding und Rahmen mit enthält). Das ganze lässt sich auch über die Developer Console nachvollziehen, scheinbar kann er das wirklich nicht besser.

    Gibt es denn keine zuverlässige und vernünftige Möglichkeit browserübergreifend die width eines Elementes auf ein anderes zu übertragen?

    Gruß,

    Harlequin

    PS: mit dem IE-BoxModell bräucht ich einfach nur die offsetWidth zuweisen...

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Hallo,

      Mein geliebter Opera kann zwar mit getComputedStyle umgehen, liefert aber schwachsinnige Werte... Die ausgelesene width entspricht dort der offsetWidth

      Derartige Fehler sind mir noch nie im Opera begegnet. Welche Version? Welcher Render-Modus? Hast du da ein minimales Beispiel?

      PS: mit dem IE-BoxModell bräucht ich einfach nur die offsetWidth zuweisen...

      Im Zweifelsfall: Just do it. Wechsel das Box-Modell: http://www.css3.info/preview/box-sizing/

      Mathias

      1. Yerf!

        Derartige Fehler sind mir noch nie im Opera begegnet. Welche Version? Welcher Render-Modus? Hast du da ein minimales Beispiel?

        Version: 9.24
        Rendermodus: CSS1Compat
        Beispiel:

          
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">  
        <html>  
          <head>  
          <meta http-equiv="content-type" content="text/html; charset=windows-1250">  
          <title>Test</title>  
          <style type="text/css">  
           div{  
           width:200px;  
           padding:50px;  
           border:solid 5px black;  
           height:100px;  
           background-color:red;  
           }  
          </style>  
          </head>  
          <body onload="alert(document.defaultView.getComputedStyle(document.getElementById('test'),'').getPropertyValue('width'));">  
         <div id="test">TEST</div>  
          </body>  
        </html>  
        
        

        Interesant ist, dass die Developer-Tools vom Opera (im DOM-Tree unter Metrics) ebenfalls die falsche Width anzeigen. Wenn man aber FF und Opera nebeneinander hält, so sieht man, dass die ELemente in beiden Browsern gleich groß sind.

        Im Zweifelsfall: Just do it. Wechsel das Box-Modell: http://www.css3.info/preview/box-sizing/

        Dann zerlegts mir nur das restliche Layout (ich erweitere die Seite nur...)

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Hallo,

          Version: 9.24

          Ok, ist wohl ein Bug. Opera 9.5 Beta gibt 200px aus.

          Im Zweifelsfall: Just do it. Wechsel das Box-Modell: http://www.css3.info/preview/box-sizing/

          Dann zerlegts mir nur das restliche Layout (ich erweitere die Seite nur...)

          Du kannst das auch auf ein einziges Element anwenden.

          Mathias

          1. Yerf!

            Ok, ist wohl ein Bug. Opera 9.5 Beta gibt 200px aus.

            Das macht Hoffnung.

            Du kannst das auch auf ein einziges Element anwenden.

            Das *eine* Element wäre eine komplexe Tabelle mit einer Jahresübersicht, die per JS eine feststehende Zeile/Spalte beim scrollen bekommt... wer weis, was das alles für Auswirkungen mit sich zieht (ich bin froh, dass das ganze inzwischen im IE und FF halbwegs funktioniert... nur noch n paar kleine Macken mit CSS übertünchen und gut ;-)

            Aber das ganze ist eh eine Intranet-Sache, die derzeit nur für IE und FF freigegeben ist, von daher steck ich da keine großen Aufwände für Opera rein. Ich bin da immer nur etwas persönlich intressiert, dass das auch in *meinem* Browser geht ;-)

            Gruß,

            Harlequin

            --
            <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->