简体   繁体   中英

Append new attribute with setAttribute()?

I have a div element and would like to append new style attributes to it. I have tried to do it like this:

element.setAttribute('style', 'property: value');

And it works, but if that element already had styles applied, they will all get overwritten.

Lets say I have this situation:

HTML:

<div id="styled"></div>

JavaScript:

var styled = document.getElementById('styled');
styled.setAttribute('style', 'display: block');

This works, but if I need to append another style lets say:

styled.setAttribute('style', 'color: red');

I would then lose style added in previous setAttribute() method!

How can one append styles to elements with JavaScript?

Thanks!

Well, if using setAttribute you could just take the previous value by getAttribute and concat them:

 element.setAttribute('style', element.getAttribute('style')+'; color: red');

However, that's not the best practise for most HTML attributes, which are usually reflected as a property and you could just do something like element.className += " …" . For inline styles in particular, you'd use the .style property that allows you to set and unset every single CSS property:

element.style.display = 'block';
element.style.color = 'red';

Update the style object of the dom-node rather than using setAttribute :

document.getElementById("styled").style["color"] = "red";

More information: http://www.w3schools.com/jsref/dom_obj_style.asp

If you are adding styles you can set them directly using the style attribute:

var foo = document.getElementById('foo');

foo.style.backgroundColor = 'red';
foo.style.width = '400px';
foo.style.height = '500px';
foo.style.fontWeight = 'bold';

When you use setAttribute , you're replacing the entire style attribute, so you lose any styles that are already there. You need to concatenate your addition to the old style.

oldStyle = styled.getAttribute('style');
styled.setAttribute('style', oldStyle + 'color: red;');

But it's simpler to use the sub-properties of the style property:

styled.style.color = 'red';
styled.style.display = 'block';

If you need to get the style name from a variable, you can use array notation:

styleName = 'color';
styleValue = 'red';
styled.style[styleName] = styleValue;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM