Layer positionieren im IE
Sven Rudolph
- dhtml
0 Thomas Hieck0 Sven Rudolph0 CirTap
Hallo an alle
Ich bin gerade dabei mit CSS und Javascript ein dynamisches Menu zu basteln. Dafuer habe ich mit
#Menuname
{
position:absolute;
top:x;
left:y;
width:a;
height:b;
}
und
<div id="Menuname">
<img src="xy.jpg">
...
</div>
mehrere Layer definiert. Mit dem Netscape kann ich ueber document.layers[i] wunderbar auf die Layer zugreifen und diese verschieben.
Der IE kennt aber das document.layers Objekt nicht sondern das document.all Object. Da stehen aber ALLE HTML-Tags drin. Also hab ich mir mit
var num_max = document.all.length;
for(var i=0 ; i<num_max ; i++)
{
if(document.all[i].tagName=="div")
{
...
}
}
die <div>-Tags herausgefiltert.
Danach wollte ich mit
document.all[i].style.top=alter_wert + schritt;
den Layer neu positionieren. Da der IE Die Position des Layers aber als z.B. 100px abspeichert ist die obige Addition gar nicht moeglich, sondern ergibt den z.B. den String "150px50". Die Zuweisung auf die linke Seite quittiert der IE dann mit der Fehlermeldung "Ungueltiges Argument". Wenn ich mit einer substring(0,3)-Anweisung die beiden Buchstaben "px"am Ende entferne dann ist das Ergebniss der String 15050. Der Layer wird also ganz falsch positioniert. Einen versuchten Typecast mit toInt(alter_wert) quittiert der IE mit der Fehlermeldung "Objekt erwartet". So, und jetzt weiss ich nicht mehr weiter. Wie bringe ich den IE dazu zu document.all.style.top einfach nur etwas dazuzuaddieren? Oder denke ich viel zu kompliziert?
Vielen Dank im Voraus.
Sven
Da der IE Die Position des Layers aber als z.B. 100px abspeichert ist die obige Addition gar nicht moeglich, sondern ergibt den z.B. den String "150px50".
Dann musst Du den Wert vorher in eine Zahl umwandeln
temp = parseint(document.all[ID].style.top);
document.all[ID].style.top = (temp+50);
Oder Du benutzt:
document.all[].style.pixelTop;
fuer den Internet Explorer.
Viele Gruesse, Thomas Hieck
Dank fuer die Antwort
Dann musst Du den Wert vorher in eine Zahl umwandeln
temp = parseint(document.all[ID].style.top);
Daraufhin bekomme ich die Fehlermeldung "Objekt erwartet".
Uebrigens:
Ich muss den Layer ueber seine Indexnummer ansprechen und nicht ueber seine ID. Ansonsten kann ich die darunterliegenden Menueintraege nicht dynamisch mitverschieben.
Sven
temp = parseint(document.all[ID].style.top);
Daraufhin bekomme ich die Fehlermeldung "Objekt erwartet".
Wenn Du alle DIVs mit gleicher ID versehen hast (was eigentlich dem Gedanken des ID-Attributes widerspricht), erstellt der IE daraus freundlicherweise ein Array aus "DIV-Objekten". Du mußt deinen Index also in diesem Array ansetzen:
document.allID.style (glaub ich)
Geht im IE meines wissen auch mit
DasDIVmitID[index].style...
ohne document.all - sofern ID verwendet wurde.
CirTap