Avatar billede cmau Nybegynder
04. oktober 2007 - 18:52 Der er 17 kommentarer

Hente alt style på et element

Hej Eksperter

Jeg ved, at der i JS er en måde, at fx hente bredden på et element, men findes der en måde hvorpå jeg let kan få alt style på et given element via både class og id?

Jeg har nemlig en hel liste over class og id, hvor scriptet så skal hente det valgtes style ud.
Avatar billede olebole Juniormester
04. oktober 2007 - 19:05 #1
<ole>

Der findes ikke en standardiseret og crossbrowser metode til at hente andet, end hvad der er sat direkte på elementets style-objekt ... enten i taggets style-attribut eller via script

/mvh
</bole>
Avatar billede jhe-ting Nybegynder
04. oktober 2007 - 19:05 #2
elm.currentStyle
Avatar billede jhe-ting Nybegynder
04. oktober 2007 - 19:10 #3
Avatar billede olebole Juniormester
04. oktober 2007 - 19:12 #4
- ja, den virker i IE, men ikke andre steder. Denne er standard - og virker i FF:
    window.getComputedStyle(elm, "")["borderWidth"];
Avatar billede olebole Juniormester
04. oktober 2007 - 19:13 #5
- man skal lige opdatere sit vindue, når man har hentet kaffe  ;o)

- og man kan naturligvis også bruge dot-notation:
    window.getComputedStyle(elm, "").borderWidth;
Avatar billede cmau Nybegynder
04. oktober 2007 - 19:21 #6
Dvs. at det ikke er mulig at få fx et array med data?
Avatar billede cmau Nybegynder
04. oktober 2007 - 19:23 #7
Hvis jeg prøver alert(window.getComputedStyle(e, "").length); får jeg 99 udskrevet, har det noget at gøre med hvilke styles der er sat?
Avatar billede olebole Juniormester
04. oktober 2007 - 19:44 #8
Du kan jo prøve at alert'e dem  :)
Avatar billede olebole Juniormester
04. oktober 2007 - 19:54 #9
Du kan lave denne lille 'cowboy-test' for at se, hvad objektet gemmer på af properties og metoder:

<script type="text/JavaScript">
window.onload = function() {
    var o = gE("gnu");
    var aCss = window.getComputedStyle(o, "");
    var a = [];
    for (var x in aCss) {
        a.push( x + " => " + aCss[x] );
    }
    with ( open("", "", "width=400,height=200,resizable=yes,scrollbars=yes").document ){open();write(a.join("<br>\r\n"));close()};
}
</script>

<div id="gnu">&nbsp;</div>
Avatar billede olebole Juniormester
04. oktober 2007 - 19:56 #10
Sorry, jeg har en wrapper, der hedder 'gE' i min HTML-temlate. Sådan ser det i alm. DOM:
    var o = document.getElementById("gnu");
Avatar billede olebole Juniormester
04. oktober 2007 - 20:03 #11
- og som du kan se, indeholder objektet en metode, der hedder 'item'. Prøver du at kalde den med et tal som argument, kan du se, den returnerer en streng, som er navnet på en style-property. Den metode ville vi kunne bruge sådan:

window.onload = function() {
    var o = gE("gnu");
    var oCss = window.getComputedStyle(o, "");
    var a = [];
    for (var i=0,j=oCss.length; i<j; i++) {
        a.push( oCss.item(i) + " => " + oCss[ oCss.item(i) ] );
    }
    with ( open("", "", "width=400,height=200,resizable=yes,scrollbars=yes").document ){open();write(a.join("<br>\r\n"));close()};
}
Avatar billede superdreng Nybegynder
04. oktober 2007 - 20:13 #12
Undskyld jeg forstyrre men ville bare have at olebole skulle have sine velfortjente point i min post som han har glemt :-)
http://www.eksperten.dk/spm/797237
Avatar billede cmau Nybegynder
04. oktober 2007 - 22:26 #13
Ahh olebole du en skat :D Men Den kan ikke rigtig lide IE. Skulle jeg så have fat i elm.currentStyle dertil?

Og vil den også du på en class?
Avatar billede cmau Nybegynder
04. oktober 2007 - 23:14 #14
En anden ting, hvis jeg henter fra id fx test, som har en baggrunds farve eller billede defineret, så får jeg stadigvæk undefined på den. Det lader som om det kun er color, height og width den vil hente ordenligt.
Avatar billede olebole Juniormester
04. oktober 2007 - 23:19 #15
cmau >> Husker du mon at bruge 'CamelCase'? Det hedder 'backgroundColor', 'marginTop', osv  :)

superdreng >> Tak, jeg har været forbi med et svar  ;o)
Avatar billede olebole Juniormester
04. oktober 2007 - 23:24 #16
function getCSSprop(oElm, sPropName) {
    if (window.getComputedStyle) return window.getComputedStyle(oElm, "")[sPropName];
    else if (oElm.currentStyle) return oElm.currentStyle[sPropName];
    return null;
}

alert( getCSSprop(document.getElementById("mitDiv"), "fontSize") );
Avatar billede cmau Nybegynder
05. oktober 2007 - 07:53 #17
Ang. camelcase, burde getcomputedstyle så ikke selv retunere den, den retunere nemlig background-color  fx.

Min function er nedenstående, hvor jeg så har valgt ikke at medtage alle dem som er undefined.

            function StartEditor() {
                var e2 = document.getElementById('IdSelect');
                if(e2.selectedIndex != 0) {
                    //alert(e2.options[e2.selectedIndex].value);
                    var o = document.getElementById(e2.options[e2.selectedIndex].value);
                    var oCss = window.getComputedStyle(o, "");
                    var a = [];
                    for(var i=0;i<oCss.length;i++) {
                        if(oCss[oCss.item(i)]) a.push(RenameWord(oCss.item(i)) + ':' + oCss[oCss.item(i)] + ';');
                        //a.push( RenameWord(oCss.item(i)) + " => " + oCss[ oCss.item(i) ] );
                    }
                    with(open("", "", "width=400,height=200,resizable=yes,scrollbars=yes").document){open();write(e2.options[e2.selectedIndex].value + ' {<br />');write(a.join("<br />\r\n"));write('<br />}');close()};
                }
            }
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

IT-JOB