Olaf: Wie Attributzahl bei style ermitteln?

Hallo,

ich bekomme per script einige HTML Elemente übergeben, beispielsweise ein <div id=catalog-1...>...</div>

catalog-1 ist mit style="border.....etc.." formatiert, wobei ich nicht weiß, wieviele Attribute in "style" definiert sind.

Genau das würde ich jetzt gerne per Javascript überprüfen. "getAttribute" sieht dafür ganz brauchbar aus, aber damit
kann ich immer nur einen ganz bestimmten Wert abfragen, den ich vorher kennen muss, also beispielsweise getAttribute("fontSize",true);

Jetzt möchte ich natürlich nicht 500 Abfragen fahren, wenn das <div> vielleicht nur zwei Style-Attribute hat. Kann ich die Länge
der Atrribute, die in style="..." definiert sind, nicht für <div> abfragen und dann per Schleife durchgehen?

Hab leider nichts Passendes gefunden.

Danke für Eure Hilfe

Gruß

Olaf

  1. Hellihello

    getAttribute("fontSize",true);

    fontSize ist das Attribut? Ich hätte jetzt gedachtes wäre  "style" oder "class".

    frankx

    1. Hi,

      getAttribute("fontSize",true);
      fontSize ist das Attribut? Ich hätte jetzt gedachtes wäre  "style" oder "class".

      Der IE kennt getAttribute() auch beim style-Objekt!

      Umgekehrt kann der IE (leider) oft nicht via getAttribute() auf Attributwerte zugreifen, wenn dieses Attribut gleichzeitig als eigenes Objekt verfügbar ist (dies ist bei STYLE/style ja der Fall). Der Mozilla beispielsweise macht das richtig, und man kann hier mit getAttribute() den Inhalt es STYLE-Attributes auslesen, mit split() am ";" aufteilen und hat so den realen Inhalt sauber erfaßt inkl. der Anzahl.

      Da der IE aber hier eben Probeme macht, kann man real nur, s. Struppi, stur alles durchgehen - und das wegschmeißen, was nicht erwünscht ist. Aber: Hier steht halt nicht(!) das, was real in HTML als Attributwert hinterlegt ist! D.h., bei style:="border: 1px solid blue;" findet man eben u.a. ein "blue" bei borderColor, borderTopColor, ..., sowie auch Defaultwerte wie "0" bei "zIndex".

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. Hallo,

        Der Mozilla beispielsweise macht das richtig, und man kann hier mit getAttribute() den Inhalt es STYLE-Attributes auslesen, mit split() am ";" aufteilen und hat so den realen Inhalt sauber erfaßt inkl. der Anzahl.

        Dafuer bietet sich object.style.cssText an, was auch der IE kennt (zumindest ab 5.5).

        MfG, Thomas

        1. Dafuer bietet sich object.style.cssText an, was auch der IE kennt (zumindest ab 5.5).

          Nur als Ergänzung: Den hatte ich auch gesehen - IE 4

          Struppi.

          1. Vielen Dank Euch allen

            Das hilft mir sehr weiter

            Gruss

            Olaf

        2. Hi,

          Dafuer bietet sich object.style.cssText an, was auch der IE kennt (zumindest ab 5.5).

          Jep, genauer: alle "modernen" Browser bis auf Opera (bzw. dem Konqueror, der hier ggf. verbuggt ist) können das.

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          1. Hi,

            Jep, genauer: alle "modernen" Browser bis auf Opera (bzw. dem Konqueror, der hier ggf. verbuggt ist) können das.

            BTW: Oder kann der Opera das vielleicht auch, obwohl er das styleSheets-Objekt nicht kennt? IMHO unwahrscheinlich, wäre aber natürlich theoretisch möglich.

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. Hellihello,

        Umgekehrt kann der IE (leider) oft nicht via getAttribute() auf Attributwerte zugreifen, wenn dieses Attribut gleichzeitig als eigenes Objekt verfügbar ist (dies ist bei STYLE/style ja der Fall).

        Gibts denn dafür keine js-klassen wie sarissa für JS/XML oder kann es die logischerweise nicht geben?

        frankx

        1. Hi,

          Gibts denn dafür keine js-klassen wie sarissa für JS/XML

          Wie meinst Du das? Eine Library, die den STYLE-(Attribut-)Wert browserübergreifend ermittelt?

          oder kann es die logischerweise nicht geben?

          Wenn ja: Nein, das kann es nicht geben. Der IE handelt hier nicht standardkonform, weil er bestimmte Attribute halt falsch behandelt. Und da er keinen Zugriff via getAtribute auf den Attributwert hat, geht es halt nicht - kann man nichts machen.

          Alle Möglichkeiten, Eigenschaften stupide durchgehen, cssText abfragen oder auch mit outerHTML den HTML-Code holen und dann das STYLE-Attribut auf diese Art auswerten. liefern nicht das zurück, was real eingetragen wurde. Das Ergebnis ist immer die Interpretation vom IE.

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. ich bekomme per script einige HTML Elemente übergeben, beispielsweise ein <div id=catalog-1...>...</div>

    catalog-1 ist mit style="border.....etc.." formatiert, wobei ich nicht weiß, wieviele Attribute in "style" definiert sind.

    Genau das würde ich jetzt gerne per Javascript überprüfen. "getAttribute" sieht dafür ganz brauchbar aus, aber damit

    Es reicht durchaus [obj].style.attribut;

    Jetzt möchte ich natürlich nicht 500 Abfragen fahren, wenn das <div> vielleicht nur zwei Style-Attribute hat. Kann ich die Länge
    der Atrribute, die in style="..." definiert sind, nicht für <div> abfragen und dann per Schleife durchgehen?

    Ja, aber du kannst auh alle Eigenschften von style abfragen:

    var o = document.getElementById('test');
    for(var i in o.style) s += i + '=' + o.style[i] + '\n';
    alert(s);

    Struppi.

    1. Hi,

      var o = document.getElementById('test');

      s muß auch noch definiert werden:

      var o = document.getElementById('test'), s;

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!