2012-02-09 17 views
5

たとえば、テーブルをシミュレートするために、多くの要素の幅を変更したいとします。私はあなたがこれを行うことが実現:jQueryを使用してCSSルール定義を変更する

$(".class").css('width', '421px'); 

これは、各要素のインラインstyle='width: 421px;'属性を変更します。今、私は何をしたい:実際のCSSルール定義を変更します

.class { 
    width: 375px; ==[change to]==> 421px; 
} 

変更する必要が入れ子になった<ul><li>のない1000の場合、それは100のに来るとき、それはこのように思えることだろうjQueryに.css()メソッドを使用させようとするよりも、パフォーマンスが向上します。

私はthis exampleを見つけた - これは私がやろうとしているものです:

var style = $('<style>.class { width: 421px; }</style>') 
$('html > head').append(style); 

私はEVERY最適のクラスを持つことができないので、私は、クラス($el.removeClass().addClass())を交換しようとしないんだけど幅(379px、387px、402px ..)。

私は<style>要素を作成し、幅を動的に設定できましたが、もっと良い方法があると思います。

+2

本当にあなたはあなたのCSSに2つのクラスを書いて、必要なときに適切なクラスを追加/削除するべきだと思います。あなたはJSであなたのスタイルシートを混乱させるべきではありません、それはすぐにunmaintainableになるでしょう。 – kapa

+0

@kapaこれは制限があります。なぜならすべてのCSSを事前に定義しなければならないからです。たとえば、任意のn番目の子要素を強調表示することはできませんでした。 '#root> div:nth-​​child( '+ Nth +'){背景:赤; } ' –

答えて

1

document.styleSheets Chromeで[0] .addRule作品、何FF

0

の 'ない関数'私のためには、ヘッダーに空のスタイルブロックを含めることです:

<style id="custom-styles"></style> 

そして、このような何かでそれを操作する:

$('#custom-styles').text('h1 { background: red }') 

私は、これはクロム(まあ、クロム - 63.0)の現在のバージョンで動作しているように見えますテストしてみたとFirefox(57.0.4)。