shuthichi: DOM Manipulation

Hallo Forum,

ich möchte mein DOM per JavaScript manipulieren.
Wenn ich einem <A> oder einem <DIV> Element jedoch ein onmouseover-Attribut anhängen will scheitere ich.

Im FF2 + FF3 funktioniert das Script. Im IE6 + IE7 jedoch nicht.
Kann mir jemand nen Tip geben.

  
function initialize(){  
  var calendar  = document.getElementById("calendar");  
  var days  = 24;  
  var counter  = 1;  
  
  for (counter; counter<=days; counter++){  
    var door   = document.createElement("a");  
    var doorNr = document.createTextNode(counter);  
  
    door.id = "door"+counter;  
    door.className = "door_noborder";  
    door.setAttribute("onmouseover","this.className = 'door_border'");  
    door.setAttribute("onmouseout","this.className = 'door_noborder'");  
    door.appendChild(doorNr);  
    calendar.appendChild(door);  
  }  
}  

Viele Grüße
Niko

  1. Hi shuthichi!

    Hallo Forum,

    ich möchte mein DOM per JavaScript manipulieren.
    Wenn ich einem <A> oder einem <DIV> Element jedoch ein onmouseover-Attribut anhängen will scheitere ich.

    Der IE hat Probleme damit. Eventuell kannst du das Attribut mit door.onmouseover = "this.className = 'door_border'"; setzen.

    Aber warum möchtest du das überhaupt?
    Gib den Links doch einfach eine Klasse und arbeite im CSS mit der Pseudoklasse :hover.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hallo Hopsel,

      ... Eventuell kannst du das Attribut mit door.onmouseover = "this.className = 'door_border'"; setzen.

      ein String als Eventhandler?

      Gib den Links doch einfach eine Klasse und arbeite im CSS mit der Pseudoklasse :hover.

      für onmousemove?

      Gruß, Jürgen

      1. für onmousemove?

        sorry, hab mich verlesen. Aber die neue Brille ist schon in Arbeit.

        Gruß, Jürgen

  2. Hallo shuthichi,

    door.setAttribute("onmouseover","this.className = 'door_border'");

    versuch mal

    door.onmousemove=function() { this.className = 'door_border' } ;

    calendar.appendChild(door);

    Advent, Advent, ein Lichtlein brennt ... oder Alle Jahre wieder ...

    Gruß, Jürgen

    1. door.onmousemove=function() { this.className = 'door_border' } ;

      onmouseover

      sorry, verlesen.

      Gruß, Jürgen

    2. Danke für eure Hilfe!

      Ich habe in der Zwischenzeit diesen Artikel gefunden: http://www.peterkropff.de/tutorials/js_dom_2/links_generieren.htm

      Ich habe das Problem jetzt so gelöst:

        
      function initialize(){  
        var calendar = document.getElementById("calendar");  
        var days     = 24;  
        var counter  = 1;  
        
        for (counter; counter<=days; counter++){  
          var door = document.createElement("a");  
          var doorNr = document.createTextNode(counter);  
        
          door.id = "door"+counter;  
          door.setAttribute('name', "door"+counter);  
          door.className = "door_noborder";  
          door.onmouseover = function () {this.className="door_border";}  
          door.onmouseout = function () {this.className="door_noborder";}  
          door.appendChild(doorNr);  
          calendar.appendChild(door);  
        }  
      }  
      
      

      Funktioniert jetzt in FF2, FF4, IE6, IE7.
      @Jürgen: die 24 hat mich wohl verraten ;-)

      1. Hallo shuthichi,

        @Jürgen: die 24 hat mich wohl verraten ;-)

        nicht nur, denn ich kenne nicht viele Ereignisse, bei denen ein Kalender mir Türen benötigt wird.

        Gruß, Jürgen

      2. @@shuthichi:

        var counter  = 1;
          for (counter; counter<=days; counter++){
           // ...
          }

        Die Anweisung counter; soll was bewirken? Dafür könntest du auch schreiben:

          var counter = 1;  
          for (; counter <= days; counter++)  
          {  
           // ...  
          }
        

        Üblich ist aber die Schreibweise

          for (var counter = 1; counter <= days; counter++)  
          {  
           // ...  
          }
        

        door.onmouseover = function () {this.className="door_border";}
            door.onmouseout = function () {this.className="door_noborder";}

        Auch diese Zeilen sollten mit Semikola abgeschlossen werden:

            door.onmouseover = function () {this.className = "door_border";};  
            door.onmouseout = function () {this.className = "door_noborder";};
        

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)