hambam: Auslesen von CSS-Attributen mit dem IE, einfach?

Hi alle !

Zur Zeit scheitere ich an dem Versuch, eine Style-Angabe auszulesen.

Zuerst dachte ich mir sowas:

xpos = document.all.copyright.style.pixelLeft;

Auf die Art machts jedenfalls der Netscape (mal so nebenbei)....

Dann, ich lese ja auch selfhtml (richtig?), auf die folgende Art:

xpos = document.all.copyright.style.getAttribute("pixelLeft","false");

Aber, der Wert ist immer 0 (in Worten: NULL)

Nur, wie geht's?

hambam

  1. versuchs mal mit:
    xpos = document.all.tags("DIV")[copyright].style.pixelLeft;

    anstatt DIV kannst du auch beliebige andere TAGS einsetzten

    solong

    Norbert

    1. Hi Norbert!

      versuchs mal mit:
      xpos = document.all.tags("DIV")[copyright].style.pixelLeft;

      Funzt nicht, bringt Fehlermeldung:
      document.all.tags(...)[...].style ist kein Objekt.

      Danke schonmal,

      hambam

      1. Hi Norbert!

        versuchs mal mit:
        xpos = document.all.tags("DIV")['copyright'].style.pixelLeft;

        Funzt nicht, bringt Fehlermeldung:
        document.all.tags(...)[...].style ist kein Objekt.

        Danke schonmal,

        hambam

        copyright = ID ?
        kleines versäumniss meinerseits copyright = string daherr in
        'copyright'
        hoffe es klappt

        solong

        1. Hallo nochmal (und danke)

          xpos = document.all.tags("DIV")['copyright'].style.pixelLeft;

          ...gibt jetzt keine Fehlermeldung mehr aus, ok. ok., aber .... der ausgelesene Wert ist
          wieder 0.

          hambam

  2. Hi hambam,

    Aber, der Wert ist immer 0 (in Worten: NULL)

    hilft vielleicht das aus der MSDN?

    <cite>
    The pixelLeft property reflects the value of the cascading style sheets (CSS) left attribute for positioned items. The property always returns 0 for nonpositioned items, because "left" has meaning only when the object is positioned. Use the offsetLeft property to calculate actual positions within the document area.
    </cite>

    Gruss,
    Martin

    1. Hallo Martin !

      The pixelLeft property reflects the value of the cascading style sheets (CSS) left attribute for positioned items. The property always returns 0 for nonpositioned items, because "left" has meaning only when the object is positioned. Use the offsetLeft property to calculate actual positions within the document area.

      Wenn ich das richtig verstehe, liefert "left" immer dann 0, wenn das Objekt noch nicht positioniert wurde. Ich denke, das mache ich aber.
      Nichtsdestotrotz probierte ich mal dieses offsetLeft aus, aber der Rückgabewert ist dann
      undefined.

      So sieht die Style-Definition aus:

      #copyright {position:absolute; text-align:center;z-index:100;}

      hambam

      1. Hi hambam,

        #copyright {position:absolute; text-align:center;z-index:100;}

        ohne es ausprobiert zu haben vermute ich, dass der IE die Angaben vermisst, wo es positioniert ist. Also left und top.

        Gruss,
        Martin

        1. Hi Martin !

          #copyright {position:absolute; text-align:center;z-index:100;}

          Ich dachte eigentlich, daß text-align:center das DIV in die Mitte setzt (macht es auch, zwar beim
          IE noch nicht so wie ich will, aber das steht mal erst ganz woanders, oder?)

          Und dann sollten nach meiner Logik auch die Werte für Left gesetzt sein.
          (Was auch beim lieben Netsie der Fall ist, ... oh yes i love him).

          hambam

  3. Hallo!

    Eine ganz ähnliche Disskusion haaten wir mal... vieleicht hilft dir das ein wenig weiter:
    <../../sfarchiv/1999_2/t03501.htm#a16849>

    Grüße
    Thomas

    1. Hallo Thomas!

      <../../sfarchiv/1999_2/t03501.htm#a16849>

      Da scheinst Du recht zu haben. Offensichtlich handelt es sich hierbei um das gleiche Problem.
      Nur leider kann ich mich nicht darauf beschränken, daß ich feste Werte per STYLE im Tag
      selber übergebe. Die Werte muß ich leider schon auslesen können.
      (Sollte das etwa einer dieser soooo unwichtigen Nachteile des IE gegenüber des NC sein?,
      Der IE wird doch immer als sooo stark hingestellt, vorallem im Bereich CSS, das NC ja offiziell überhaupt nicht kann, der IE aber wohl?)
      War nur so ein kleiner Gedanke von einem eher NC-Anhänger (zwischendurch mal gezweifelt,
      aber jetzt umso mehr)

      hambam

      1. Hallo hambam!

        Ich glaube ich habe etwas für dich. ;-)

        <../../sfarchiv/1999_3/t06860.htm#a33759>
        das müsste auch für andere CSS-Werte gelten.

        Hoffe das hilft dir weiter. ?

        Grüße
        Thomas

        1. Sorry Thomas !

          Hab wohl irgendwas auf den Augen gehabt, aber ...

          sieh an, die folgenden Ideen, inclusive Deiner glaube ich (denke/hoffe ich), hab ausprobiert:

          xpos = document.all.copyright.style.getAttribute("pixelLeft","false");  
          xpos = copyright.style.pixelLeft;  
          xpos = document.all.tags("DIV")['copyright'].style.pixelLeft;  
          xpos = document.all.copyright.style.offsetLeft;  
          xpos = copyright.style.offsetLeft;  
          xpos = document.all.copyright.currentStyle.pixelLeft;  
          xpos = copyright.currentStyle.pixelLeft;  
          xpos = document.all.copyright.currentStyle.getAttribute("pixelLeft","false");  
          

          Steh ich jetzt immer noch auf dem Schlauch?
          Wenn ja, bitte ich um Entschuldigung und um eine Aufklärung für kleine 2-jährige Windelpubser.

          hambam

          1. Hallo hambam!

            Also, das Problem liegt wohl daran, daß du dein #copyright nicht "richtig" positioniert hast:
            #copyright {position:absolute; text-align:center;z-index:100;}

            Da ist nämlich wirklich kein Wert da um ausgelesen zu werden. (du kannst so nur offsetLeft abfragen.)

            Hier einige Links von MS wie der IE es macht:
            http://msdn.microsoft.com/workshop/author/om/measuring.asp#chp_measuring
            http://msdn.microsoft.com/workshop/Author/dhtml/reference/properties/pixelLeft.asp

            Der folgende Code funktioniert:

            Grüße
            Thomas

            <html>
            <head>
            <style type="text/css">
            #copyright {
            position:absolute;
            top:130px;
            left:200px;
            width:300px;
            height:30px;
            border:solid 1px blue;
            z-index:3;
            }
            </style>
            </head>
            <body>

            <div id="copyright">© Alle Rechte vorbehalten</div>
            <div id="copyright2">© Alle Rechte vorbehalten</div>
            <script>
            document.all.copyright2.style.pixelLeft = 300;
            alert("pixelLeft ist:" + copyright2.style.pixelLeft);
            alert("offsetLeft ist:" + copyright2.offsetLeft);
            alert("left ist:" + copyright.currentStyle.left);
            alert("top ist:" + copyright.currentStyle.top);
            alert("width ist:" + copyright.currentStyle.width);
            alert("height ist:" + copyright.currentStyle.height);
            alert("zIndex ist:" + copyright.currentStyle.zIndex);
            </script>
            </body>
            </html>

            PS: ersetze mal copyright2 durch:
            <div id="copyright2" style="position:absolute;">© Alle Rechte vorbehalten</div>

            1. Hallo Thomas !

              Ich danke Dir erstmal sehr für Deine ausgesprochen ausführliche Hilfe.

              Heute früh ist mir ein großer Fehler aufgefallen. Ich hab das Javascript in einer
              externen Datei, die natürlich beim Laden der Seite mitgeladen wird.
              Bei meinen Versuchen schien der IE auch die Veränderungen am Script mitzunehmen,
              denn mal gab's einen Fehler, meistens 0 und auch undefinded.
              Vorhin hab ich aus Spaß mal ganz was anderes probiert und auch den Alert weggenommen,
              aber er führt jetzt trotzdem aus! Das heißt wohl, das der IE die Datei aus dem Cache holt und
              das veränderte Originial ignoriert hat. Jetzt bin ich davon ausgegangen, daß ein Shift-Reload
              die Seite neu lädt (wie beim NC), denn er hat entgegen des "normalen" Reloads wieder an
              den Anfang positioniert (und nicht mehr etwas nach unten gescrollt, oder so).
              Aber das war offensichtlich mein Fehler!
              Ich werde jetzt von vorne testen müssen, höchstwarscheinlich ist die Lösung doch schon dabei,
              aber nicht ausgewertet worden.
              Warum er aber "sporadisch" die Veränderungen übernahm und jetzt zuletzt bekam ich ihn
              nicht mehr dazu das Script neu einzulesen, ich weiß es nicht.

              Aber erstmal vielen Dank !

              hambam