Avatar billede speder Nybegynder
23. januar 2004 - 10:36 Der er 5 kommentarer og
1 løsning

Referere til et billede i en tabel

Hej

Jeg kan godt referere til et billede med følgende:

document.images['logoimage'].offsetTop

Men hvis billedet er indsat i en tabel virker det ikke længere i Netscape og Opera. Hvordan gør jeg så?
Avatar billede speder Nybegynder
23. januar 2004 - 11:11 #1
Det er i øvrigt noget vrøvl at det virker i IE. Det virker kun hvis billedet befinder sig udenfor tabeller, forms, etc.
Avatar billede amerikaner Nybegynder
23. januar 2004 - 11:52 #2
OK...
First...Navigator and Internet Explorer both use the width and height properties to extract the element's width and height. However, they utilize different properties to determine the element's coordinates. Navigator uses x and y to retrieve these values, while Internet Explorer uses offsetLeft and offsetTop to do so.

A better way to define the image's position and dimensions is to first assign the image's reference to a variable.

IE and NS6 differ on what constitutes a container. However, the container is THE PARENT...in the case of a table the parent is the table.

For obtaining an absolute offset, a simple recursive algorithm which walks up the parents and adds up all the offsets will work in both:

<!-- This works for all browser types if using SHTML -->
function getAbsX(elt) { return (elt.x) ? elt.x : getAbsPos(elt,"Left"); }
function getAbsY(elt) { return (elt.y) ? elt.y : getAbsPos(elt,"Top"); }
function getAbsPos(elt,which) {
iPos = 0;
while (elt != null) {
  iPos += elt["offset" + which];
  elt = elt.offsetParent;
}
return iPos;
}

This would work with IE (just copy paste) and you could modify it to use variables for IE and NS

var trueOffsetLeft = 0;
var trueOffsetTop = 0;
var parentObject = document.all['bob'];
while (parentObject != null){
  trueOffsetLeft += parentObject.offsetLeft;
  trueOffsetTop += parentObject.offsetTop;
  parentObject = parentObject.offsetParent;
}
Avatar billede speder Nybegynder
24. januar 2004 - 10:22 #3
Jeg fandt selv en løsning og den er næsten identisk med din - så du får points. Men du skal lige skrive et svar.
Avatar billede roenving Novice
25. januar 2004 - 02:00 #4
-- og lige en, jumper har lavet:

function getPos(elm) {//jumper
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
}
Avatar billede amerikaner Nybegynder
30. januar 2004 - 09:17 #5
Undskyld Speder...jeg altid glem'r at klikk "Abonnér"

roenving: Hvis jeg læse det rigtig...that only "walks up" one level (or breaks.  You need something like.

function getPos(elm){ //Jose Jeria (og mig!)
  var ref = elm;
  var elmOffsetTop = elmOffsetLeft = 0;

  while(ref != document.body) {
    elmOffsetTop += ref.offsetTop;
    elmOffsetLeft += ref.offsetLeft;
    ref = ref.offsetParent;
  }
  return {x:elmOffsetLeft,y:elmOffsetTop}
}
Avatar billede roenving Novice
30. januar 2004 - 18:52 #6
>>amerikaner

-- den går så mange trin op, som der stadig er objekter !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester