Avatar billede mireigi Novice
09. december 2008 - 12:06 Der er 11 kommentarer og
1 løsning

Finde placering af element

Hej eksperter,

hvordan finder jeg placeringen af et element på siden når det ikke har "position:absolute" eller "position:relative" ?

MiReiGi
Avatar billede olebole Juniormester
09. december 2008 - 12:44 #1
<ole>

function getPos (elm) {
  for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
  return {x:zx,y:zy};
}

var oPos = getPos( document.getElementById("mitElm") );
alert("x: " + oPos.x + " :: y: " + oPos.y)

/mvh
</bole>
Avatar billede mireigi Novice
09. december 2008 - 13:29 #2
Hmm, følgende placerer bare elementet øverst til venstre, i stedet for ovenpå den knap jeg trykker på:

var objPos = getPos(document.getElementById("CalenderBtn"));
        document.getElementById("Calendar").style.position = "absolute";
        document.getElementById("Calendar").style.top = objPos.y;
        document.getElementById("Calendar").style.left = objPos.x;
        document.getElementById("Calendar").style.display = "block";

Er det mig der har lavet en brøler, eller skal jeg uden for scriptet her for at finde fejlen?

MiReiGi
Avatar billede mireigi Novice
09. december 2008 - 14:21 #3
Ok, fik rettet fejlen, var en slåfejl i ID'et. Men nu placerer den så mit element (en table i det her tilfælde) øverst til venstre i den indkapslende tabel, i stedet for oven på knappen jeg trykker på.
Avatar billede olebole Juniormester
09. december 2008 - 14:38 #4
Altid enheder, når der er tale om CSS - og værdien er forskellig fra 0  ;o)

        document.getElementById("Calendar").style.top = objPos.y + "px";
        document.getElementById("Calendar").style.left = objPos.x + "px";
Avatar billede olebole Juniormester
09. december 2008 - 14:39 #5
Skal den så komme frem under knappen, skal der nok stå noget à la:
    document.getElementById("Calendar").style.top = (objPos.y + document.getElementById("CalenderBtn").offsetHeight) + "px";
Avatar billede mireigi Novice
09. december 2008 - 14:54 #6
Er gået væk fra det med absolut placering, og er skiftet til en <span></span> hvor jeg smider det hele ind i via:
document.getElementById("CalendarBox").innerHTML = "bla bla bla";

Men jeg kan ikke rigtigt få det til at virke. Den "wrapper" kalenderen ned på næste linje, i stedet for at ligge den ved siden af den <input /> hvor den skal bruges.

Hvis jeg nu smider min kode her, gider du så kigge på det?

MiReiGi
Avatar billede olebole Juniormester
09. december 2008 - 16:03 #7
Næppe ... innerHTML er ikke noget, jeg beskæftiger mig med andet til en hurtig cowboy-test  =)

Inden du går videre af den sti, burde du måske kikke på denne tråd, hvor en anden har gjort det samme og øjensynligt er løbet ind i de sædvanlige problemer:
    http://www.eksperten.dk/spm/855778
Avatar billede mireigi Novice
09. december 2008 - 20:14 #8
Jeg er godt klar over at innerHTML ikke er det bedste, men syntes heller ikke at document.write er optimalt. Specielt ikke når det kan være svært at placere korrekt på siden.
Avatar billede olebole Juniormester
09. december 2008 - 20:50 #9
'ikke det bedste' er vist the understatement of the year  ;o)

document.write skal kaldes, mens siden loader - ellers overskriver den dokumentet. Desuden vil den aldrig kunne gøres kompatibel med XHTML.

Siden 1999 (IE 5 og Netscape 6) har vi haft DOM til at manipulere dokumentets element træ. Brug det i stedet  ;o)
Avatar billede mireigi Novice
09. december 2008 - 21:51 #10
Har været ude af JS-verdenen i et 3-4 år, og er først lige kommet tilbage til den. Kan du give et eksempel på hvordan man skriver en tekststreng ud via/til DOM? :)
Avatar billede mireigi Novice
22. december 2008 - 19:57 #11
Nå, fandt mit svar i en ande tråd.

"firstChild.nodeValue" erstatter "innerHTML".

Hvis du smider et svar, så får du nogle point ole.
Avatar billede mireigi Novice
11. februar 2009 - 10:46 #12
Lukker spørgsmålet pga. manglende svar fra svargiver.
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