Julian: setAttributeNode() - Probleme mit divs und dem IE

Hallo liebe Leute,
Ich habe ein kleines Problem mit dem dynamischen einfügen von divs im IE.
Folgender Code funktioniert problemlos im Firefox aber nicht im IE (Windows, Version 6.x)

  
var punkt = document.createElement("div");  
var attribut = document.createAttribute("style");  
      attribut.nodeValue = "background-color: black; width: 20px; height: 30px;";  
      document.getElementById("rahmen").appendChild(punkt);  
      document.getElementsByTagName("div")[1].setAttributeNode(attribut);  

der Explorer gibt als Fehler "Mitglied nicht gefunden" aus.
Setze ich nun aber statt ...createElement("div")... ...createElement("hr")... ein und ändere die Attribute entsprechend ab meckert der IE nicht mehr und gibt eine Trennlinie aus.
Hat jemand eine Ahnung woran das liegen könnte?
mfg Julian

  1. Hi,

    na ja, laut Self-HTML funktioniert createAttribute beim Internet-Explorer nicht.
    Ich habe mir eine kleine setStyle-Funktion gebaut, die unterscheidet:
    if (document.createAttribute)
     ...
    else
     element.style.backgroundColor = ...
    So nach dem Schema etwa, also über das Style-Object.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo Rouven,

      na ja, laut Self-HTML funktioniert createAttribute beim Internet-Explorer nicht.

      klingt logisch, hab ich wohl übersehen.
      Aber:

        
      var punkt = document.createElement("hr");  
      var attribut = document.createAttribute("width");  
            attribut.nodeValue = "30";  
            document.getElementById("rahmen").appendChild(punkt);  
            document.getElementsByTagName("hr")[0].setAttributeNode(attribut);  
      
      

      funktioniert im IE perfekt
      mfg Julian

    2. Hallo Rouven,
      Danke übrigens für deine (sehr-) schnelle Antwort.
      Ich hab mir deinen Hinweis auf style.setAttribute mal zu Gemüte geführt. Ist in meinem Fall sowieso besser geeignet als im DOM-Baum rumzupfuschen. Danke auch hierfür.
      mfg Julian

    3. Hallo,

      Ich habe mir eine kleine setStyle-Funktion gebaut, die unterscheidet:
      if (document.createAttribute)
      ...
      else
      element.style.backgroundColor = ...

      Wieso auch immer diese Unterscheidung notwendig ist - die Methode über createAttribute ist umständlich und wie gesagt nicht browserübergreifend. Sie ist beim Setzen von Styles weitesgehednd unnötig, der Zugriff über style sollte ausreichen.

      Mathias

      1. Stimmt schon, sagen wir meine Methode ist eigentlich auch kein setStyle sondern ein setAttribute und filtert noch auf einiges mehr.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. var punkt = document.createElement("div");
    var attribut = document.createAttribute("style");
          attribut.nodeValue = "background-color: black; width: 20px; height: 30px;";
          document.getElementById("rahmen").appendChild(punkt);
          document.getElementsByTagName("div")[1].setAttributeNode(attribut);

      
    createAttribute und setAttribute sind hier absolut überflüssig, da ein DIV Element diese Attribute bereits hat. D.h. du versuchst hier ein Browserinternes Attribut zu überschreiben was offensichtlich nit jeder Browser mag. Zumal nicht in dieser Form, da ein Style ja keinen string als Attribute hat, sonder widerrum Attribute.  
      
    Mach es einfach so:  
    var punkt = document.createElement("div");  
    punk.style.backgroundColor = 'black';  
    punk.style.width = '20px';  
    punk.style.height = '30px;';  
      
    Das funktioniert immer.  
      
    Struppi.
    
    -- 
    [Javascript ist toll](http://javascript.jstruebig.de/)