我想用JavaScript来操纵我的CSS。首先,它被认为是一个不错的小脚本,可以为我的手风琴菜单尝试不同的颜色,以及来自输入字段的不同背景/标题 - /内容 - / ...背景颜色。
我理解如何使用js获取输入值。
我了解如何使用getElementById()
,getElementsByClassName()
,getElementsByTag()
和getElementsByName()
来操纵CSS。
现在,问题是我的CSS看起来像这样:
.accordion li > a {
/* some css here */
}
.sub-menu li a {
/* some css here */
}
.some-class hover:a {
/* css */
}
.some-other-class > li > a.active {
/* css */
}
如何使用JavaScript更改此类样式的属性?
答案 0 :(得分:3)
没有办法直接用JavaScript操作一些CSS样式。相反,您可以更改stylesheet本身的规则,如下所示:
var changeRule = function(selector, property, value) {
var styles = document.styleSheets,
n, sheet, rules, m, done = false;
selector = selector.toLowerCase();
for(n = 0; n < styles.length; n++) {
sheet = styles[n];
rules = sheet.cssRules || sheet.rules;
for(m = 0; m < rules.length; m++) {
if (rules[m].selectorText.toLowerCase() === selector) {
done = true;
rules[m].style[property] = value;
break;
}
}
if (done) {
break;
}
}
};
changeRule('div:hover', 'background', '#0f0');
selector
必须与现有选择器完全匹配,只会忽略选择器文本与{
之间的空格。
您可以开发代码来查找和更改选择器名称的部分匹配,或者只检查特定样式表而不是所有样式表。事实上,当拥有数以千计的规则的样式表时,它也相当昂贵。
使用此代码段无法操纵伪元素。
jsFiddle的现场演示。
答案 1 :(得分:1)
所有DOM元素都有一个可以通过JavaScript更改的样式对象
或者如果你正在使用jQuery:
您可以定位元素并操纵其属性,但不要改变规则。
如果要更改大量样式属性,常用方法是更改元素的类名以更改其外观。这可以使用className property完成,或者如果您使用的是jQuery:addClass和removeClass。
答案 2 :(得分:0)
我用下划线实现了Teemu的答案。 http://jsfiddle.net/6pj3g/4/
var rule = _.chain(document.styleSheets)
.map(function(sheet){return _.flatten(sheet.cssRules)})
.flatten()
.unique()
.find(function(rule){ return rule && rule.selectorText && (rule.selectorText.toLowerCase() === selector.toLowerCase())})
.value()
if (rule){
rule.style[property] = value;
} else {
throw 'selector not found: ' + selector;
}