views:

62

answers:

5

Hi, 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.

A: 

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

Ankur Chauhan
+2  A: 

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().

mway
It has nothing to do with onload. Did you test anything before wrote this?
galambalazs
A: 

Confirm that your document object is the same one, it is probably not.

Are you running the commands in different windows / frames, perhaps?

Carter Galle
A: 

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')

kennebec
sorry, but I couldn't understand this function and its use.
Rahul Utb
+2  A: 

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.

galambalazs
+1, good answer!
Björn