Append Style to DOM not Replacing Existing

23,948

Solution 1

Which browser are you using? In Chrome, this works for me:

<html> 
<head> 
<style type="text/css"> 
  .test { background: #ff0000; font-family: "Verdana"; }
</style> 
<script type="text/javascript"> 
  function changeback(onoff)
  {
    if(onoff){
      document.getElementById("field1").style.background="#0f0";
    } else {
      document.getElementById("field1").style.background="#000";
    }
  }
 </script> 
 </head> 
 <body> 
   <h1>Test</h1> 
   <p id="field1" onclick="changeback(true);" class="test">This is a test</p> 
</body> 
</html> 

When I click on the text, the background color changes, but the rest of the style (in this case, the font) stays the same.

Is that what you're trying to do?

Solution 2

Here is how you can do it :

var elem = document.getElementById('YOUR ELEMENT ID');
elem.style.setProperty('border','1px solid black','');

elem.style is an object implementing the CSSStyleDeclaration interface which supports a setProperty function. If you check the style property in Firebug now, you will notice addition of the border property within the style attribute of the element.

Share:
23,948
Mago Maverick
Author by

Mago Maverick

Software dude powered by challenge, complexity, ideas &amp; collaboration.

Updated on July 09, 2022

Comments

  • Mago Maverick
    Mago Maverick almost 2 years

    How can I append style element to DOM without eliminating existing style on the item (eg color, text-align, etc)?

    The event calls the function, but the problem is 'Style' gets completely replaced with the single item instead.

    I have simple code triggered on the event:

    function changeback(onoff) {
       if(onoff) {
          document.getElementById("field1").style.background="#fff";
       } else            
          document.getElementById("field1").style.background="#000";
    }