这比其他一些解决方案更为复杂,但在以下情况下可能会提供更大的灵活性:
1)制作一个类定义,以隔离(封装)您要有选择地应用/删除的样式。它可以为空(在这种情况下,可能应该是):
.myColor {}
2)使用这个代码,基于http://jsfiddle.net/kdp5V/167/从这个答案 由gilly3:
function changeCSSRule(styleSelector,property,value) {
for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
var ss = document.styleSheets[ssIdx];
var rules = ss.cssRules || ss.rules;
if(rules){
for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
var rule = rules[ruleIdx];
if (rule.selectorText == styleSelector) {
if(typeof value == 'undefined' || !value){
rule.style.removeProperty(property);
} else {
rule.style.setProperty(property,value);
}
return; // stops at FIRST occurrence of this styleSelector
}
}
}
}
}
用法示例:http://jsfiddle.net/qvkwhtow/
注意事项:
- 未经广泛测试。
- 不能在新值中包含!important或其他指令。任何此类现有指令都将通过此操作丢失。
- 仅更改第一次发现的styleSelector。不会添加或删除整个样式,但是可以通过更精细的操作来完成。
- 任何无效/不可用的值将被忽略或引发错误。
- 在Chrome中(至少),非本地(如跨站点)的CSS规则不会通过document.styleSheets对象公开,因此无法在它们上使用。记住此代码的“首次发现”行为,必须添加一个局部替代并对其进行操作。
- 一般来说,document.styleSheets对操作不是特别友好,不要指望它能积极地使用。
通过这种方式隔离样式是CSS的全部目的,即使并非如此。操纵CSS规则并不是jQuery的全部目的,jQuery操纵DOM元素,并使用CSS选择器来做到这一点。