Hallo,
man wird - hier auch - immer wieder darauf hingewisen, dass "eval() ist evil!".
Das möchte ich hinterfragen. Warum soll eval() so "böse" sein?z.B.
Ich kann so eine Schleife haben:for(i=0; i < arrSubMenu.length; i++ )
{
if(arrSubMenu[i] == strSubID)
{
eval(arrSubMenu[i] + ".style.backgroundColor = '#e3e3e3'");
eval(arrSubMenu[i] + ".style.fontWeight = 'bold'");
...
}
else
{
eval(arrSubMenu[i] + ".style.backgroundColor = '#F5F7F4'");
eval(arrSubMenu[i] + ".style.fontWeight = 'normal'");
...
}
}
Hm, es schein, als stände in arrSubMenu[i] ein String, welcher eine ID repräsentieren soll. Damit kann
eval(arrSubMenu[i] + ".style.backgroundColor = '#e3e3e3'");
nur zufällig funktionieren, weil [ID].style nach keiner Regel die style-Eigenschaft eines HTML-Elementes ansprechen muss. Der Code ist also nicht nur evil, sondern falsch.
Aber es geht auch so:
for(i=0; i < arrSubMenu.length; i++ )
{
with(document.all(arrSubMenu[i]).style)
{
if(arrSubMenu[i] == strSubID)
{
backgroundColor = "#e3e3e3";
fontWeight = "bold";
...
}
else
{
backgroundColor = "#F5F7F4";
fontWeight = "normal";
...
}
}
}
Hm, das mit dem document.all meinst Du ernst?
Aber es geht auch so:
for(i=0; i < arrSubMenu.length; i++ )
{
if(arrSubMenu[i] == strSubID)
{
document.getElementById(arrSubMenu[i]).style.backgroundColor = "#e3e3e3";
document.getElementById(arrSubMenu[i]).style.fontWeight = "bold";
...
}
else
{
document.getElementById(arrSubMenu[i]).style.backgroundColor = "#F5F7F4";
document.getElementById(arrSubMenu[i]).style.fontWeight = "normal";
...
}
}
Was ist der wirkliche Unterschied? (und ich meine jetzt nicht die Tatsache, dass ich der zweiten Version mehrere Anweisungen an einem Objekt knüpfen kann)
Fragen wir doch mal anders herum:
Nenne Gründe, die von mir vorgeschlagende Methode _nicht_ und statt dessen eval() zu nutzen. Das ist, meiner Meinung nach, die grundsätzliche Frage. Die Funktion eval() ist dafür gemacht, eine vom Nutzer als String eingegebene mathematische Funktion zu evaluieren, das ist ihre Funktion, nicht weiniger, aber auch nicht mehr.
viele Grüße
Axel