Man kan ju bestämma positionen på ett objekt genom att skriva:
document.all.objekt.style.left=värde;
men hur gör man för att få fram positionen på ett objekt? När jag försöker läsa av document.all.objekt.style.left returneras ingenting.
Hur få fram position på objekt?
6 svar · 315 visningar · startad av Lennholm
När du använder document.all returneras en array och för alla objekt i den är inte style.left meningsfullt. Testa detta:
x = document.all;
for (i = 0; i != x.length; i++) {
alert("x[" + i + "] = " + x[i].nodeName);
}
Netscape stöder inte heller document.all
Om du söker ett speciellt objekt som har id="dess_id" och vill ändra dess värde för left så kan du istället använda:
if(document.getElementById) {
document.getElementById("dess_id").style.left = nya_värdet;
}
else {
document.dess_id.left = nya_värdet;
}
Vill du ha tag på tex alla divar samtidigt så använder du document.getElementsByTagName("div") så får du en array med alla divar.
alert(document.getElementById("objekt").offsetLeft);
Ett litet problem med offsetLeft är att den ger positionen relativ till offsetParent och du är inte garanterad att alla webbläsare tolkar vad som är offsetParent på samma sätt. För att vara på den säkra sidan får du göra ngt i stil med det här:
// obj får du genom obj = document.getElementById("obj_id");
function getXPos(obj)
{
var xPos = 0;
if (obj.offsetParent)
{
while (obj.offsetParent)
{
xPos += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x)
xPos += obj.x;
return xPos;
}
function getYPos(obj)
{
var yPos = 0;
if (obj.offsetParent)
{
while (obj.offsetParent)
{
yPos += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
yPos += obj.y;
return yPos;
}
missModesty skrev:
Ett litet problem med offsetLeft...
:) Det är inte specifikt för just offsetLeft. Se detta exempel;
<div style="position:absolute;top:10px;left:10px;width:100px;height:100px;border:solid blue 1px;">10x10</div>
<p> </p>
<div style="position:relative;">
<div style="position:absolute;top:10px;left:10px;width:100px;height:100px;border:solid blue 1px;">10x10</div>
</div>
... left-attributet (jmfr. style.left)är 10px på båda de absolut-positionerade lagren, men eftersom det ena är ett "barn" till ett element med position:relative hamnar de på olika ställen. Så detta måste man alltid ta hänsyn till.
Jag hade läst någonstans något i stil med att om man har en länk i en <p> så räknar opera <p> som parent medan mozilla inte gör det. Men nu när jag testade själv så räknade inte opera heller <p> som parent. Så antingen minns jag fel eller också gäller det äldre opera än min.
Tack för svaren, jag fick det att fungera som jag ville med offsetLeft i både Explorer och Opera, har inte testat i Firefox än