2009-08-28 3 views
23

私は、クリックすると特定のcssクラスを隠すチェックボックスを作ろうとしていますが、その特定のクラスを取得するすべての将来のオブジェクトにもこの効果を適用したいと思っています。例えばjqueryはドキュメントのグローバルなCSS定義を操作できますか?

:私は2つのdivを持っている:

DIVAを

DIVB iはチェックボックスがクラスabcのすべてのdivを非表示にするにはクラス

を持っていないクラスABCであり、これは使用して、簡単です。 $(".abc").hide()。問題は、サイトの別の部分が後にクラスabcのdivBを作成した場合、それは隠されないということです。 jqueryコードはその時点でdivAにしか適用されていなかったからです。

私がしようとしていることは、ドキュメントのグローバルCSS定義を操作することです。ユーザーがチェックボックスをクリックすると、私はabcクラスを非表示に変更し、後でそのクラスに参加したdivが非表示になるたびに変更します。

これはjqueryで可能ですか?

+0

これは良い答えで似たような質問です:http://stackoverflow.com/questions/1079237/jquery-equivalent-of-yu-stylesheet-utility – Jourkey

答えて

30

.abcセレクタに新しいルールを追加するには、insertRuleおよびaddRule(必要な場合)のメソッドを使用できます。それは将来そのクラスが適用されるものに影響を与えるはずです。

var stylesheet = document.styleSheets[0], 
    selector = ".abc", rule = "{color: red}"; 

if (stylesheet.insertRule) { 
    stylesheet.insertRule(selector + rule, stylesheet.cssRules.length); 
} else if (stylesheet.addRule) { 
    stylesheet.addRule(selector, rule, -1); 
} 

これにはjQueryプラグインもあります。$.rule();

$('body').toggleClass('hideABC'); 

そして、次のCSSがあります:だから

body.hideABC div.abc { display:none; } 
body div.abc { display:block; } 

をそれは私はおそらくあなたのチェックボックスを追加し、クラスを削除形成<体>素子を有することにより、これを扱うでしょうhttps://github.com/flesler/jquery.rule

+5

答えをありがとう。私はこのコードはIEでのみ動作することに言及する必要がありますが。私のアプリはgreasemonkeyスクリプトなので、オンラインで見ている時間を過ごした後、Firefoxは構文が次のようになるはずです: document.styleSheets [0] .insertRule( "。abc {display:none;}"、0); –

+4

jquery.ruleは現在https://github.com/flesler/jquery.ruleに住んでいます... –

+0

現代のFirefoxでは動作しません。あなたは「エラー:操作は安全ではありません」と表示されます。 – caponica

18

でご利用いただけますあなたのページの他の場所に<div>が追加されると、 '.abc'クラスが追加され、最初のCSSルールが適用され、非表示になります。

+2

私の考えでは、これは代替案よりはるかに優れた(そして特に簡単な)アプローチです。なぜそう少数の票?このアプローチにはいくつかの欠陥がありますか? –

+1

これは本当に巧妙で、新しいルールをスタイルシートに追加しようとするよりもずっと信頼性の高いクロスブラウザであるようです。私はそのアプローチの短所は考えられません。 – daGUY

+1

これは今のところ単純ですが、AJAXポーリングからレンダリングされたデータにクラスをプログラムで適用し始めた後は、作業するのがずっと複雑になります。 –

関連する問題