Avatar billede mulemule Nybegynder
14. februar 2008 - 15:18 Der er 17 kommentarer og
1 løsning

Hvordan læser man padding og margin fra javascript.

Hej !.

Hvis man har en div, med diverse styles herunder border, margin og padding. Hvordan kan man så fra javascript dynamisk læse hvad disse styles er.

Styles er jo write only.

Border kan jeg læse vha. offsetHeight - clientHeight har jeg fundet ud af.

Men hvad med padding og margin ?

Nedenfor er copy pastet noget kode som kan ilustrer problemet.
Altså spørsmål hvad skal der stå i function read2(), så at den kan læse pixel bredden af margin og padding (evt sammenlagt).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
    <head>
        <style type="text/css">
            .divStyle1
           
            {
                padding:0px;
                margin:0px;
                border-style:solid;
                border-width:10px;
                border-color:red;
                position:absolute;
                left:10px;
                top:80px;
                width:100px;
                height:100px;
            }
            .divStyle2
           
            {
                background-color:blue;
                padding:6px;
                margin:6px;
                border-style:solid;
                border-width:0px;
                border-color:red;
                position:absolute;
                left:10px;
                top:220px;
                width:100px;
                height:100px;
            } 
            </style>
            <script>
                function read()
                {
                    div1obj =  document.getElementById('div1');
                    div1HoriBorderWidth = div1obj.offsetWidth - div1obj.clientWidth;
                    div1VertBorderWidth = div1obj.offsetHeight - div1obj.clientHeight;
                    alert("div1 har border bredder ialt: " + div1HoriBorderWidth + " og " + div1VertBorderWidth);
                }
               
                function read2()
                {
                    alert("Hvilken margin og padding breder har div2 ?");
                   
                }
            </script>
           
    <BODY>
        <button onclick="read()">read</button>
        <button onclick="read2()">read2</button>
        <div id="div1" class="divStyle1"></div>
        <div id="div2" class="divStyle2"></div>
    </BODY>
</HTML>
Avatar billede fennec Nybegynder
14. februar 2008 - 15:40 #1
Styles er skam ikke read only :o)

Her er et eks:
<div id="div1" style="margin:10px;padding:10px;border:1px solid black;">
hejsa
</div>

<input type="Button" value="klik" onClick="getIt();return false;">
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function getIt()
{
    div = document.getElementById("div1")
    alert(div.style.padding)
    div.style.padding = "20px"
}
//-->
</SCRIPT>
Avatar billede fennec Nybegynder
14. februar 2008 - 15:44 #2
Alle styles kan tilgåes via element.style attributten. Vær opmærksom på at JS navnet og style navnet ikke nødvendigvis er ens. Gælder f.eks bagrundsfarven:

Style:
<div id="div1" style="background-color:#000000;">

JS:
document.getElementById("div1").style.backgroundColor = "#000000"
Avatar billede fennec Nybegynder
14. februar 2008 - 15:48 #3
Ahh. glemte lige noget. Er style angivet vis stylesheet, som i dit tilfælde, kan informationerne vist nok ikke trækkes ud. Det er kun vis de er angivet direkte på elementet...
Avatar billede mulemule Nybegynder
14. februar 2008 - 15:54 #4
Nej det virker ikke hvis det står i stylesheet, iøvrigt tror jeg ikke din metode er helt 'reglementeret' om jeg så må sige. Men fred være med det.

spm, går på hvilken kode man kan skrive i min funktion read2().

X
Avatar billede w13 Novice
14. februar 2008 - 16:07 #5
Fennecs metode er netop den reglementerede. ;o)

Og i read2() kan du vel skrive det, som Fennec foreslog:

function read2(){
    div = document.getElementById("div1");
    alert(div.style.padding);
    div.style.padding = "20px"
}

eller:

function read2(id){
    var div=document.getElementById(id);
    var margin=div.style.margin;
    var padding=div.style.padding;
    alert("Margin: "+margin+"\nPadding: "+padding)
}

Og så skal funktionen f.eks. kaldes med: onclick="read2('div1')" eller onclick="read2('div2')"
Avatar billede mulemule Nybegynder
14. februar 2008 - 17:25 #6
w13 -> Den metode du angiver virker ikke når styles er angivet i style sheets.
Avatar billede w13 Novice
14. februar 2008 - 17:59 #7
Nej. Det er korrekt.
Avatar billede olebole Juniormester
15. februar 2008 - 00:27 #8
<ole>

Virker i IE, FF og Opera (muligvis flere):

function getCssProp(oElm, sProp) {
    var oCss = window.getComputedStyle ? window.getComputedStyle(oElm, "") : oElm.currentStyle ? oElm.currentStyle : null;
    return (oCss ? oCss[sProp] : null);
}

NB: Vær opmærksom på, at hvis du har sat:

div {
    border: 1px solid red;
}

- skal du spørge på de enkelte properties ... f.eks: borderBottomWidth

/mvh
</bole>
Avatar billede mulemule Nybegynder
15. februar 2008 - 06:17 #9
Super Tak, havde lige netop fundet det samme selv.

Man skal også huske at i Firefox hedder styles f.eks. padding-width, og i IE samme style paddingWidth.

Ole -> Er du i tvivl om dit svar er korrekt siden du ikke svarer i et svar med det samme ?
Avatar billede w13 Novice
15. februar 2008 - 08:19 #10
Det skulle da meget gerne hedde paddingWidth i begge. =/ I JS i hvert fald.
Avatar billede olebole Juniormester
15. februar 2008 - 15:25 #11
"Man skal også huske at i Firefox hedder styles f.eks. padding-width, og i IE samme style paddingWidth." >> Det er ikke korrekt. Der er hverken noget, der hedder 'padding-width' eller 'paddingWidth' i de browsere, jeg kender.

Det er gammel vane at vente med at afgive svar, til jeg er sikker på, 'spørgsmål og svar' i tråden er slut ... og det er ikke nødvendigvis tilfældet med et korrekt svar  :)

Det lyder dog, somom du synes, du har fået tilfredsstillende besvarelser, så jeg lægger et svar  ;o)
Avatar billede mulemule Nybegynder
15. februar 2008 - 18:28 #12
OK, det var også frit efter hukkomelsen.

Jeg kender godt den vane, jeg driller bare lidt.

Personligt synes jeg, af flere forskellige årsager, det er et tosset system ikke at ligge svar med det samme. Men fred være være med det , og tak for svar.
Avatar billede olebole Juniormester
15. februar 2008 - 18:32 #13
Det er også noget tosset noget, men erfaringen siger, at spørgere ofte har en tosset måde at håndtere besvarelser og points på. Hvis én svarer lægger et svar, er det ofte ham, der bliver præmieret - på trods af, der er andre i tråden, som også fortjener points. Derfor er det ofte bedre at vente med at tage en evt. debat om det emne, når spørgsmålet er færdigbesvaret  ;o)

Tak for points  =)
Avatar billede olebole Juniormester
15. februar 2008 - 18:35 #14
- og så er der generelt en kedelig tendens under udvikling:

"Jeg vil gerne bede om en café latte."

"Ja, det bliver 28 kr."

"Det tror jeg gerne, men lad mig lige se din vare, før jeg betaler, Putte!"

;o)
Avatar billede mulemule Nybegynder
15. februar 2008 - 19:00 #15
jeg giver altid point til dem som har lagt svar i svar, også selvom nogen har svaret i kommentarer. Det er ikke fordi jeg er tosset men for at straffe folk som ligger svar i kommentarer ! !. He he.

Forstod desværre ikke helt sammenligning med latten, men må lige kigge nærmere på det senere, er sikker på det gir god mening :).

Hej hej.
Avatar billede olebole Juniormester
15. februar 2008 - 19:49 #16
Det var dog en ualmindelig dum begrundelse for at belønne evt. skrup forkerte besvarelser - fremfor korrekte! Nå, men tak for points
Avatar billede mulemule Nybegynder
15. februar 2008 - 20:17 #17
Amen jeg beløner ikke forkerte svar.

Jeg gir kun ponint til rigtige svar, men kan godt finde på at overse hvis nogen andre også har svaret gode ting i kommentare.

At ligge svar i kommentaret svarer til at have en cafe, og når så en kommer og siger må jeg be om en caffe latte, og gør tegn til at betale, så siger man, nej nej du skal ikke betale nu lig pengene tilbage, først skal jeg lave caffe latten og så gir jeg dig den, og så skal jeg sige vil du gerne betale, og så skal du betale.
Avatar billede olebole Juniormester
15. februar 2008 - 23:46 #18
- aha
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