Siri: cloneNode zur Ermittlung von offsetHeight - legitim?

Hallo,

ich habe folgendes Konstrukt:

<ul>
  <li id="l1">Bla</li>
  <li id="l2">
      <beliebigerinhalt/>
  </li>
  <li id="l3">Blubb</li>
</ul>

<li id="l2"> ist zunächst mit display: none; ausgeblendet und soll per Javascript aufgezoomt werden und zwar auf die Höhe seines <beliebigerinhalt/>. Dazu muss ich ja wissen, wie hoch wäre den <li id="l2"><beliebigerinhalt/></li>. Durch display: none; ergibt offsetHeight aber 0.

Jetzt meine Idee: <li id="l2"> clonen, display auf block setzen, und offsetHeight abfragen. Ist das legitim? Oder kann ich die Höhe von <li id="l2"> einfacher ermitteln?

Viele Grüße
Siri

  1. Meine Herren,

    Jetzt meine Idee: <li id="l2"> clonen, display auf block setzen, und offsetHeight abfragen. Ist das legitim?

    offsetHeight gibt ja die Höhe in Relation zum Elternelement zurück, ein geklonter Knoten hat aber zunächst mal kein Elternelement.

    Bist du dir übrigens sicher, dass du die display-Eigenschaft auf "block" und nicht "list-item" setzen möchtest?

    Oder kann ich die Höhe von <li id="l2"> einfacher ermitteln?

    Du kannst das Element getrost einblenden, die Höhe abfragen und anschließen sofort wieder ausblenden. Weil Javascript das UI blockiert, dürfte es auch nicht zu einem Aufblitzen des Elements kommen.

    --
    Hey Girl,
    i wish you were asynchronous, so you'd give me a callback.
    1. Hallo,

      Jetzt meine Idee: <li id="l2"> clonen, display auf block setzen, und offsetHeight abfragen. Ist das legitim?

      offsetHeight gibt ja die Höhe in Relation zum Elternelement zurück, ein geklonter Knoten hat aber zunächst mal kein Elternelement.

      Ich hab es vorübergehend in einen Bereich mit der Höhe 0 eingehängt und dann abgefragt.

      Bist du dir übrigens sicher, dass du die display-Eigenschaft auf "block" und nicht "list-item" setzen möchtest?

      Mhmm... Im Augenblick taugt mir block, behalts aber im Hinterkopf!

      Oder kann ich die Höhe von <li id="l2"> einfacher ermitteln?

      Du kannst das Element getrost einblenden, die Höhe abfragen und anschließen sofort wieder ausblenden. Weil Javascript das UI blockiert, dürfte es auch nicht zu einem Aufblitzen des Elements kommen.

      Ah! Danke! Ist das gängige Praxis bei derartigen Verfahren?

      Viele Grüße
      Siri

      1. Hi!

        Ist das gängige Praxis bei derartigen Verfahren?

        Ja. Das machen jQuery & Co. genauso.

        Mathias

    2. [latex]Mae  govannen![/latex]

      Jetzt meine Idee: <li id="l2"> clonen, display auf block setzen, und offsetHeight abfragen. Ist das legitim?

      [...]

      Bist du dir übrigens sicher, dass du die display-Eigenschaft auf "block" und nicht "list-item" setzen möchtest?

      oder noch einfacher auf element.style.diplay = '';, dann muß man sich um den Typ des Elements nicht kümmern.

      Stur lächeln und winken, Männer!

      Kai

      --
      Array(16).join("x" - 1) + " Batman!"
      „Die Borg würden nicht mal Spaß verstehen, wenn sie einen Vergnügungspark assimiliert hätten!” (B'Elanna Torres)
      SelfHTML-Forum-Stylesheet
      1. Hallo,

        oder noch einfacher auf element.style.diplay = '';, dann muß man sich um den Typ des Elements nicht kümmern.

        Dasch ja man auch ganz interessant! Damit kann ich die height nach dem Zuklappen "neutralisieren".

        Viele Grüße
        Siri