经测试可与 IE9、Chrome 和 Opera 一起使用。我在写它时遇到了这个问题,所以决定与其更改现有规则,不如在现有规则之后附加一个新规则。根据记忆,问题出在 Android 2.3 中的默认浏览器上
更改现有规则似乎是一个更好(更清洁)的解决方案,尽管最终证明附加新规则是选择的路径。(我通过使用画布创建图像然后设置背景图像属性来更改背景图像。图像可能非常大,因此首选更新)
功能
function replaceRuleAttrib(ruleSelector, attribText, newValue)
{
var nSheets, nRules, sheetNum, curSheet, curStyle, curAttrib;
var nSheets = document.styleSheets.length;
if (nSheets == 0)
document.head.appendChild(document.createElement('style'));
else
for (sheetNum = 0; sheetNum<nSheets; sheetNum++)
{
curSheet = document.styleSheets[sheetNum];
nRules = curSheet.cssRules.length;
for (ruleNum=0; ruleNum<nRules; ruleNum++)
{
curRule = curSheet.cssRules[ruleNum];
if (curRule.selectorText == ruleSelector)
{
for (styleI=0; styleI<curRule.style.length; styleI++)
{
styleName = curRule.style[styleI];
styleVal = curRule.style[styleName];
if (styleName == attribText)
{
curRule.style[styleName] = newValue;
return true;
}
}
}
}
}
document.styleSheets[0].insertRule( ruleSelector+'{' + attribText + ": " + newValue + "; }", 0);
}
示例 CSS(之前)
<style>
h1
{
color: red;
}
</style>
用法:
function onHeadingClick()
{
replaceRuleAttrib('h1', 'color', 'green');
}
示例 CSS(之后)
<style>
h1
{
color: green;
}
</style>