webForumDet fria alternativet

Hur få fram position på objekt?

6 svar · 315 visningar · startad av Lennholm

LennholmMedlem sedan aug. 2004109 inlägg
#1

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.

missModestyMedlem sedan apr. 2005228 inlägg
#2

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.

JojoxxMedlem sedan juni 20004 306 inlägg
#3
alert(document.getElementById("objekt").offsetLeft);
missModestyMedlem sedan apr. 2005228 inlägg
#4

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;
}
JojoxxMedlem sedan juni 20004 306 inlägg
#5

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>&nbsp;</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.

missModestyMedlem sedan apr. 2005228 inlägg
#6

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.

LennholmMedlem sedan aug. 2004109 inlägg
#7

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

Genererad på 358 ms · cache AV · v20260730165559-full.f96bc7eb