これは他のいくつかのソリューションよりも複雑ですが、シナリオでの柔軟性が向上する可能性があります。
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のすべての目的です。CSSルールの操作はjQueryのすべてではなく、jQueryがDOM要素を操作し、CSSセレクターを使用して行います。