2012-01-20 29 views
20

divの背景色をjquery .css()メソッドで動的に変更します。私はまた、背景色を変更する同じdivにCSS hoverセレクタを持たせたい。 jqueryで色を変更する前に、CSS hoverセレクタが機能しますが、divをjqueryメソッドで変更すると、CSS hoverセレクタが機能しなくなったようです。これを回避する方法はありますか(jquery hoverメソッドを使用せずに)?背景色のCSSホバーセレクタがjqueryで背景色を動的に変更した後に機能しない

これは私が話しているかの例です:http://jsfiddle.net/KVmCt/1/

+3

いくつかのコードを使用してインラインスタイルをしてください置き換えるのだろうか? – Alex

+0

両方とも、背景色を変更するクラスを追加するのはどうですか? – ryankeairns

+0

divのセレクターとjQueryメソッドに使用したセレクターは何ですか?これらの行のいくつかを表示できますか? –

答えて

37

あなたが経験している問題は、CSS情報の場所の重要性である:

外部スタイルシートは、文書の頭の中でCSSによる過支配されます。これは要素のstyle属性でCSSによってオーバーラウンドされます。基本的に、ブラウザーで最後に表示されたスタイルは、以前に指定された競合ルールや他の競合ルールより優先されます(キーワードが!importantでない限り)。

JavaScriptなど

ので、jQueryのは、スタイルを相反するこの常にオーバーライドが他の場所で指定された要素のインラインstyle属性にそのCSS /スタイル情報を配置します。

divの場合はcolor: redが重要で、div:hoverのスタイルは無視されます。

あなたが使用することができ、それを回避するには、次の

div:hover { 
    background-color: blue!important; 
} 

JS Fiddle demoを。

$('div').css('background-color','red').hover(
    function(){ 
     $(this).css('background-color','blue'); 
    }, 
    function(){ 
     $(this).css('background-color','red'); 
    }); 

:あなたはjQueryのhover()メソッドを使用することができ、また

div { 
    background-color: red; 
} 

div:hover { 
    background-color: blue!important; 
} 

よりよい解決策は、しかし、CSS jQueryを使ってbackground-color /他のスタイルを割り当てない、と単純に使用することですJS Fiddle demo

+1

私はそのような '!important'トリック、感謝 –

+1

@ジャスティン - 私は決してjQueryの' .css() 'メソッドを使用する機会を持っていないstecbのコメントのようにDOM要素のクラスを切り替えるニコールの答え - しかし、ちょうどホバリングのために、ダビデがここに言うように、javascriptの必要は全くありません。 –

+0

この問題を経験した私の最初の反応は、jQueryの '.hover()'を使って、CSSで書いたやり方をバックアップしていたのですが、私の驚きと驚きには、 '.hover()'関数のスクリプトは、他の動的に変化する背景色のスクリプトの後に来ました)。 CSSのルールを '!important'として指定したことがうまくいくことがわかっていれば、最初はコードでこれを修正しようとはしませんでしたが、感謝してこの答えは私に完璧な修正を与えました。私はこれをもっと将来私の心の最前線に置いていきます。 – VoidKing

2

あなたはjQueryを使ってCSSを操作するとき、それは変更するクラスを追加し、削除するためにjqueryのを使用して、スタイルシートの試みで任意のCSSをインラインで追加し、上書きしますホバーオンカラー。ここでは、作業フィドルです:http://jsfiddle.net/KVmCt/6/

jQueryのは、次のようになります。

$("div").hover(
function(){ 
$(this).addClass("blue"); 
} 
, 
function(){ 
$(this).removeClass("blue"); 
}); 
+1

またはホバーメソッドのパラメータとして '$(this).toggleClass(" blue ");を含む関数を1つだけ直接呼び出します。 ;) – stecb

7

jqueryのcss方法は、それを実行した後、あなたのdivは

<div style="background-color: red">Hello world</div>` 
のように見えることを意味し、あなたの要素にインラインスタイルを追加します

インライン・スタイリングは、CSSスタイルより常に優先順位が高くなります。

インラインスタイルを使用する代わりにCSSクラスを追加してみませんか?以下で試してみてください。

$("div").addClass("edited"); 

div:hover, div.edited:hover { 
    background-color: blue; 
} 

div.edited { 
    background-color: red; 
} 

、あなたはそれが動作表示されます。

0

簡単な方法は、CSSに重要なタグを追加することです。

div:hover { 
    background-color: blue !important; 
}; 
2

あなたはちょうどあなたが

$("#yourselector").attr("style", " "); 

を使用することができますインラインスタイルを削除する必要がある場合にはstyle=" "

関連する問題