3 回答
TA贡献1815条经验 获得超13个赞
与这里的某些答案相反,使用Javascript编辑样式表本身不仅可行,而且性能更高。简单地这样做$('.myclass').css('color: red')最终将遍历匹配选择器的每个项目,并分别设置style属性。这确实效率不高,如果您有数百个元素,它将引起问题。
更改项目的类是一个更好的主意,但是您仍然遇到相同的问题,因为您要更改N个项目的属性,该属性可能很大。更好的解决方案可能是更改单个父项或少数父项上的类,然后使用css中的“层叠”命中目标项。这适用于大多数情况,但不是全部。
有时,您需要将很多项目的CSS更改为动态的,或者没有办法通过击中少数父母来实现。更改样式表本身,或添加一个小的新样式表以覆盖现有的CSS,是更改项目显示的一种非常有效的方法。您只需要与DOM进行一次交互,浏览器就可以真正有效地处理那些更改。
jss是一个库,可帮助简化从javascript直接编辑样式表的过程。
TA贡献1784条经验 获得超9个赞
您可以使用以下功能:
function setStyle(cssText) {
var sheet = document.createElement('style');
sheet.type = 'text/css';
/* Optional */ window.customSheet = sheet;
(document.head || document.getElementsByTagName('head')[0]).appendChild(sheet);
return (setStyle = function(cssText, node) {
if(!node || node.parentNode !== sheet)
return sheet.appendChild(document.createTextNode(cssText));
node.nodeValue = cssText;
return node;
})(cssText);
};
特点:
该函数是用vanilla-js编写的,因此比jQuery替代品具有更好的性能。
第一次调用后会创建一个样式表setStyle,因此,如果您不调用它,则不会创建任何样式表。
相同的样式表可重复用于以下的 setStyle
该函数返回对与您添加的CSS束关联的节点的引用。如果使用该节点作为第二个参数再次调用该函数,它将用新的CSS替换旧的CSS。
例
var myCSS = setStyle('*{ color:red; }');
setStyle('*{ color:blue; }', myCSS); // Replaces the previous CSS with this one
浏览器支持
至少它可以在IE9,FF3,Chrome 1,Safari 4,Opera 10.5上运行。
还有一个IE版本,可在现代浏览器和旧版本的IE上使用!(适用于IE8和IE7,但可能会使IE6崩溃)。
TA贡献1808条经验 获得超4个赞
好问题。这里的很多答案都提供了一个与您的要求直接矛盾的解决方案
“我知道如何使用jQuery为元素分配宽度,高度等,但是我实际上想做的是更改样式表中定义的值,以便可以将动态创建的值分配给多个元素。
”
内联 jQuery .css样式元素:它不会改变CSS的物理规则!如果您想这样做,我建议您使用普通的JavaScript解决方案:
document.styleSheets[0].cssRules[0].cssText = "\
#myID {
myRule: myValue;
myOtherRule: myOtherValue;
}";
这样,您将设置样式表css规则,而不附加内联样式。
希望这可以帮助!
添加回答
举报