How to access css properties in javascript when applied via external CSS file?

I have a little problem. When I set the css rule using some property, say, background-image in an external .css file and then try to access it using javascript in another external .js file, it does not work. That is to say I do not get any value for document.getElementById(someId).style.backgroundImage.

But when I set the css rule using style attribute in html file itself, it works.

So, my query is can't I access css property in js, if css is set in external .css file.

Answers:

Answer

You can only access style properties in Javascript that have been set via Javascript (or the style attr).

To access the elements current style you should fetch the computed style of the element.

var el = document.getElementById('hello');
var comp = el.currentStyle || getComputedStyle(el, null);
alert( comp.backgroundColor );

Note, that the computed style may vary in browsers (like color being in hex or rgb) so you should normalize that if you want unified results.

Answer

If you are trying to access a css property set in a stylesheet, rather than an inline style property, use document.defaultView.getComputedStyle (anything but IE below 9) or element.currentStyle in older IE's.

eg:

function deepCss (who, css){
    var dv, sty, val;
    if(who && who.style){
        css= css.toLowerCase();
        sty= css.replace(/\-([a-z])/g, function(a, b){
            return b.toUpperCase();
        });
        val= who.style[sty];
        if(!val){
            dv= document.defaultView || window;
            if(dv.getComputedStyle){
                val= dv.getComputedStyle(who,'').getPropertyValue(css);
            }
            else if(who.currentStyle){
                val= who.currentStyle[sty];
            }
        }
    }
    return val || '';
}

deepCss(document.body,'font-size')

Answer

Are you trying to retrieve the property before it's actually rendered/the DOM is ready? Try doing it in the body's onload event, or if you're using jQuery, $(document).ready().

Answer

You could use jquery to edit. Refer to http://api.jquery.com/css/

Answer

the style property can be used to set styles and to retrieve inline style values, but it cannot retrieve style values set in an external style sheet.

someElement = document.getElementById("element");
myStyles = document.defaultView.getComputedStyle(someElement,null);
backgroundImage = myStyles.getPropertyValue("background-image"); // w3c
backgroundImage = someElement.currentStyle["background-image"]; //IE

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.