views:

595

answers:

3

can we override inline css through javascript? with IE6 compatibility.

I found this pure css solution but not works in IE.

http://nataliejost.com/override-inline-styles-from-the-stylesheet/

http://www.sitepoint.com/blogs/2009/05/27/override-inline-css/

<div class="block">
    <span style="font-weight: bold; color: red;">Hello World</span>
</div>

we can override this inline style with this solution

.block span[style]{
    font-weight: normal !important;
    color: #000 !important;
}

This solution work in all major browser except IE6.

+10  A: 

Of course you can by using jQuery's css() method : http://docs.jquery.com/CSS/css#namevalue

So if for example you have the following HTML:

<p style="color:red;">A colored text</p>

You can change the color by doing the following in jQuery:

$("p").css("color","blue");

And it's going to work in IE6.

Guillaume Flandre
cool! thanks very much
metal-gear-solid
and is there any pure css solution to do this
metal-gear-solid
jQuerys css() actually adds inline CSS in the DOM. Doing it the other way around, overriding jQuerys css() with css is more difficult (it works using !important, but not in IE6)
David
Do you want to make the change at runtime or in the file? In the file, simply use the `style` attribute, otherwise at runtime you'll need to use a client-side scripting language.
Russ Cam
I'm not sure what you're asking but in the case of my example, you could try: p {color: blue !important;} in a css file.
Guillaume Flandre
@Jitendra: the pure CSS solution is to add !important, but as said before, IE6 doesnt follow. Read more about CSS inheritance at w3c.
David
ok david thanks
metal-gear-solid
@david if the css is added dynamically into the DOM does that means over time if you toggle something back and forth it will just end up being a really huge DOM? or does it intelligently remove stuff that is redundant?
Simon_Weaver
+2  A: 

!important does work in IE6, it's just your selector span[style] won't, as attribute selectors aren't supported there. If you can find another selector that will pick the spans you want to override, that'll work fine. Perhaps just .block span is enough?

Otherwise, yes, you can change it from JavaScript if you absolutely have to (don't you have any control over the markup?):

span.style.fontWeight= 'normal';
span.style.color= 'black';
bobince
A: 

i tried this it works fine in mozilla but not in internet explorer 8 Could u help me out?

kiran k