m99: getProperty - IE macht Probleme

Hallo Leute,

nachdem ich fast verzweifle, frage ich nun lieber euch.

Erstmal der Quelltext:
function divGetProperty(id, name) {
  var base = document.getElementById(id);
  var value = null;
  if (document.defaultView) {
    value = document.defaultView.getComputedStyle(base, "").getPropertyValue(name);
  } else {
    eval("value = base.style." + name + ";");
  }
  return value;
}

function divSetProperty(id, name, value) {
  var base = document.getElementById(id);
  eval("base.style." + name + " = "" + value + "";");
}

Mit diesen beiden simplen Funktionen kann ich die CSS-Werte eines DIVs im Firefox einwandfrei auslesen und setzen. Nur der IE macht mal wieder Probleme. Indem ich jeden Wert vorher mit divSetProperty auf seinen Ausgangswert setze, scheint es mit dem IE zu funktionieren. Das ist aber natürlich nicht Sinn der Sache gewesen.

Wo ist der Fehler? Was habe ich nicht beachtet? Oder gibt's bessere Lösungen?

Vielen Dank im Voraus
m99

  1. Hallo m99,

      
      
    function divProperty(id, name, value)  
       {  
       if(var base = document.getElementById(id))  
          if(value)  
             {  
             base.style.setAttribute(name, value)  
             return(true)  
             }  
          else return(base.style.getAttribute(name, "false"))  
       return(false)  
       }  
    
    

    mal so aus dem Bauch und ungetestet gebastelt.

    Gruß aus Berlin!
    eddi

    1. Hi eddi,

      das tut es leider auch nicht. Syntaktisch erscheint es mir einwandfrei, aber ich habe mittlerweile gelesen, daß die css-Werte für die IE erst mit Javascript gesetzt werden müssen, bevor man sie mit Javascript auslesen kann.

      Eine merkwürdige Art und Weise, die ich leider nicht verwenden kann, weil ich ja sonst alle CSS-Werte für jedes DIV statisch setzen müßte.

      Vielen Dank trotzdem
      m99

    2. Hallo eddi,

      mittlerweile konnte ich das Problem lösen.
      Für den IE muß man die kaskadierten CSS-Werte über currentStyle ermitteln und zusätzlich noch die Namen in die Javascript-CSS-Syntax überführen:

      function getProperty(name) {

      // konvertiert CSS- in JS-CSS-Syntax
        function toJSCSS(value) {
          ...
        }

      ...
          // IE-Teil
          var base = document.getElementById("myDIV");
          eval("value = base.currentStyle." + toJSCSS(name) + ";");
        ...
        return value;
      }

      m99

      1. Hallo,

        // IE-Teil
            var base = document.getElementById("myDIV");
            eval("value = base.currentStyle." + toJSCSS(name) + ";");

        eval ist zumeist unnötig (unnötig fehleranfällig, unnötig langsam, unnötig verkomplizierend).
        value = base.currentStyle[ toJSCSS(name) ];
        sollte theoretisch äquivalent funktionieren, also die currentStyle[...]-Notation.
        Habe hier keinen MSIE, aber ich glaube einfach einmal Thomas.

        Mathias