Christian S.: offsetWidth bei versteckten Elementen (display: none)

Hi

ich möchte die Breite einer Textbox auslesen, welche allerdings zu dem Zeitpunkt wo sie ausgelesen ist, versteckt sein kann, und zwar durch irgendein weit entferntes Elternelement, welches auf display: none steht.

Die offsetWidth scheint bei nicht sichtbaren (display: none) Elementen auf 0 zu stehen.

Nun hab ich versucht, die Textbox einfach mit display: inline sichtbar zu machen, allerdings hat das keinerlei Auswirkungen. Der Firebug stellt sie in der HTML-Ansicht immer noch ausgegraut dar (wie andere nicht sichtbaren Elemente), aber er sagt mir auch zugleich das der display-Wert auf "inline" steht.

Dann hab ich es noch über currentStyle bzw. getComputedStyle probiert, aber das liefert "auto", außer wenn ich den width-Wert direkt angebe. (aber dann brauch ich auch kein offsetWidth mehr).

Hat jmd. eine Idee?

Gruß
Christian

  1. hi,

    ich möchte die Breite einer Textbox auslesen, welche allerdings zu dem Zeitpunkt wo sie ausgelesen ist, versteckt sein kann, und zwar durch irgendein weit entferntes Elternelement, welches auf display: none steht.

    Die offsetWidth scheint bei nicht sichtbaren (display: none) Elementen auf 0 zu stehen.

    Jepp.

    Nun hab ich versucht, die Textbox einfach mit display: inline sichtbar zu machen, allerdings hat das keinerlei Auswirkungen. Der Firebug stellt sie in der HTML-Ansicht immer noch ausgegraut dar (wie andere nicht sichtbaren Elemente), aber er sagt mir auch zugleich das der display-Wert auf "inline" steht.

    Da kann stehen, was will - wenn das Elternelement display:none hat, wirst du auch die Textarea nie zu Gesicht bekommt.

    Dann hab ich es noch über currentStyle bzw. getComputedStyle probiert, aber das liefert "auto", außer wenn ich den width-Wert direkt angebe.

    Nun ja, dass ist ja dann auch der aktuelle Wert der width-Eigenschaft, wenn du keinen angibst.

    Hat jmd. eine Idee?

    Entweder Elternelement von display:none befreien (ggf. andere Art des "Versteckens" wählen?), oder Textarea aus dem versteckten Elternelement herausholen, und (kurzfristig) woanders einhängen (appendChild) - aber da wäre dann wieder nicht garantiert, dass das sofort neu gerendert wird, offsetWidth also sofort danach auslesbar ist.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi,

      Dann hab ich es noch über currentStyle bzw. getComputedStyle probiert, aber das liefert "auto", außer wenn ich den width-Wert direkt angebe.

      Nun ja, dass ist ja dann auch der aktuelle Wert der width-Eigenschaft, wenn du keinen angibst.

      Gibts denn keine Möglichkeit, den wahren width Wert zu bekommen? Ich glaube mein FF macht ein Textfeld immer auf 135px, wenn man nichts angibt, aber das ist ja sicher wieder von Browser zu Browser unterschiedlich und abhängig von der Schriftgröße, usw.....

      Die Methode mit dem appendChild funktioniert übrigens :-) Hänge es einfach an den body.

      Gibts noch eine möglichkeit abzufragen, ob das Element nun sichtbar ist oder nicht, OHNE den ganzen parentNode-Baum hochzusteigen, bis ein Knoten auf display: none steht? Kann mir vorstellen dass das zu sehr Performance verbraucht, da ich das auch öfters machen müsste.
      Wenns halt sichtbar ist, könnte ich mir das body-append auch sparen (was vll. auch Performance spart).

      Gruß!

      1. hi,

        Gibts noch eine möglichkeit abzufragen, ob das Element nun sichtbar ist oder nicht, OHNE den ganzen parentNode-Baum hochzusteigen, bis ein Knoten auf display: none steht?

        Wenn's eine offsetWidth von 0 hat, ohne diese haben zu sollen - dann ist's wahrscheinlich unsichtbar :-)

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }