D.R.: with() ?

Beitrag lesen

Hallo,

document.getElementById("test").id = "test";
document.getElementById("test").src = "http://grafik.gif";
document.getElementById("test").alt = "Alternativtext";

  
Das ist ohnehin nicht gut, weil der Browser dann jedes Mal nach einem Element mit der ID „test“ suchen muss. Es wäre besser, wenn du das Ergebnis erstmal in eine Variable schreiben würdest.  
  
~~~javascript
  
var el = document.getElementById("test");  
el.id = "test";  
el.src = "http://grafik.gif";  
el.alt = "Alternativtext";  

With nimmt natürlich ebenfalls den Rückgabewert und such nicht jedes Mal nach dem Element.

Leichter wäre es also, es so zu schreiben:

with(document.getElementById("test")) {

id = "test";
      src = "http://grafik.gif";
      alt = "Alternativtext";
}


>   
> Jetzt nehmen wir mal an, ich will nach dem Setzen der ID eine Meldung ausgeben lassen, dass alles geklappt hat oder so :-)  
>   
> Dazu müsste ich also  
>   
> `window.alert("Alles bestens!");`{:.language-javascript}  
>   
> schreiben.  
>   
> Kann ich diesen Code einfach so in die with()-Anweisung reinschreiben?  
  
Ja, sofern dein Element keine „window“-Eigenschaft besitzt, hangelt sich der Browser in diesem Fall bis zu window-Objekt hoch.  
  
Was bei with problematisch zu sein scheint, ist das hinzufügen von Eventhandlern. Wenn man z.B. schreibt:  
  
~~~javascript
  
with (document.body.appendChild(document.createElement("input"))){  
 type = "button";  
 value = "klick mich";  
 onclick = function(){  
  alert("Button wurde angeklickt");  
 }  
}

…kommt die Meldung „Button wurde angeklickt“ seltsamerweise überall. Mann könnte natürlich tricksen, indem man „parentNode.lastChild“ vor das onclick schreibt, aber das ist ja dann auch nicht der Sinn der Sache. Oder man verwendet addEventListener, was jedoch nicht von allen Browsern unterstützt wird :-(

Das ist einer der Gründe, warum ich es langsam einsehe, dass with deprecated ist. Trotzdem verwende ich es noch ab und zu, weil praktisch :-)

mfg. Daniel