Append new attribute with setAttribute()?

女生的网名这么多〃 提交于 2020-06-25 09:15:49

问题


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!


回答1:


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



回答2:


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




回答3:


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



回答4:


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;


来源:https://stackoverflow.com/questions/35190633/append-new-attribute-with-setattribute

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!