Hi there,
I'm having this strange problem with IE that I don't know how to fix.
Tried countless things, but neither worked and I just can't understand
why this is happening, it makes no sense to me.

First things first... To assign a color to some element border I do
the following which works fine:
$('id#element').css('borderColor', '#ff0000');

Now let's say I have a variable with that string, something like this
that also works fine:
var color = '#ff0000';
$('id#element').css('borderColor', color);

Now the real problem. On my original code, I have something like the
above example, the only difference is that the "color" variable is not
manually assigned like in the example. I have a function that grabs
some colors from an external stylesheet, puts them into an array and
returns the array.

That function is called getColorsFromCSS and the code is the
following:
getColorsFromCSS: function(cssElement) {
        var cssRules, cssSelector;
        var colors = [];

        // Which CSS rules are available in the browser?
        if (document.styleSheets[0].cssRules) {
                cssRules = document.styleSheets[0].cssRules;
        } else {
                cssRules = document.styleSheets[0].rules;
        }

        // Double check if the CSS rules are really available
        if (cssRules) {
                // Loops through each CSS selector
                for (var i = 0; i < cssRules.length; i++) {
                        cssSelector = cssRules[i].selectorText.toLowerCase();

                        // Get colors from which CSS elements?
                        if (cssElement == 'links') {
                                // Gets the color value for a specific selector
                                switch (cssSelector.replace(/,.+/i, "")) {
                                        case "ul#cp-block-items a:link":
                                                colors[0] = 
cssRules[i].style.color;
                                                break;
                                        case "ul#cp-block-items a:hover":
                                                colors[1] = 
cssRules[i].style.color;
                                                break;
                                        case "div#content a:link":
                                                colors[2] = 
cssRules[i].style.color;
                                                break;
                                        case "div#content a:hover":
                                                colors[3] = 
cssRules[i].style.color;
                                                break;
                                }

                                //
                                if(colors.length == 4) return colors;
                        } else if (cssElement.indexOf('popup') == 0) {
                                // Gets the color value for a specific selector
                                switch (cssSelector.replace(/,.+/i, "")) {
                                        case "div#" + cssElement:
                                                colors[0] = 
cssRules[i].style.color;
                                                colors[1] = 
cssRules[i].style.backgroundColor;
                                                break;
                                }

                                //
                                if(colors.length == 2) return colors;
                        }
                }
        }
},

Yes, the function is working, meaning the values are retrieved from
the external CSS and the array is returned with all the values inside
it. I conformed this by doing an alert(popupColors[0]); before trying
to set the border color and the output was a string with the color
value (like the code below).

And my real code goes like this:
var popupColors = $.admin.getColorsFromCSS('popup-notice-error');
alert(popupColors[0]); // This outputs the color value assigned to
this array index
$('div#popup-block').css('borderColor', popupColors[0]); // But this
doesn't work :(

This is only happening in IE6/7, not on Firefox 2.0.0.12, Opera 9.26
and Safari 3.1 (Win).

Any thoughts on this?

Reply via email to