Je change dynamiquement la couleur d'arrière-plan d'une div avec la méthode jquery .css()
. Je veux aussi avoir un sélecteur CSS hover
sur cette même div qui change la couleur de fond. Il semble qu'avant le changement de couleur avec jquery, le sélecteur CSS hover
fonctionne, mais après que la div ait été modifiée avec la méthode jquery, le sélecteur CSS hover
ne fonctionne plus. Existe-t-il un moyen de contourner ce problème (sans utiliser la méthode jquery hover
)?
Voici un exemple de ce dont je parle: http://jsfiddle.net/KVmCt/1/
Le problème que vous rencontrez est l’importance de l’emplacement des informations CSS:
Une feuille de style externe est remplacée par CSS en tête du document. qui est, à son tour, remplacé par CSS dans l'attribut style
de l'élément. Fondamentalement, le dernier style rencontré par le navigateur annule les règles spécifiées précédemment et les règles autrement conflictuelles (à moins que le mot clé !important
ne soit utilisé).
Comme JavaScript, et donc jQuery, place ses informations CSS/styling dans l'attribut style
en ligne de l'élément this always remplace les styles en conflit spécifiés ailleurs.
La place plus importante sur le color: red
pour la div
, en ignorant les styles div:hover
.
Pour contourner ce problème, vous pouvez utiliser:
div:hover {
background-color: blue!important;
}
Une meilleure solution consiste toutefois à éviter d'attribuer le style background-color
/à d'autres styles avec jQuery et à utiliser simplement CSS:
div {
background-color: red;
}
div:hover {
background-color: blue!important;
}
Vous pouvez également utiliser la méthode hover()
de jQuery:
$('div').css('background-color','red').hover(
function(){
$(this).css('background-color','blue');
},
function(){
$(this).css('background-color','red');
});
La méthode jquery css
ajoute un style en ligne à vos éléments, ce qui signifie qu'après son exécution, votre div ressemblera à
<div style="background-color: red">Hello world</div>`
Maintenant, le style en ligne a toujours plus de priorité que le style css, d’où votre problème.
Alors, pourquoi ne pas ajouter une classe CSS au lieu d'utiliser un style inline? Essayez avec ce qui suit:
$("div").addClass("edited");
et
div:hover, div.edited:hover {
background-color: blue;
}
div.edited {
background-color: red;
}
et vous verrez que cela fonctionne.
si vous avez juste besoin de supprimer le style en ligne, vous pouvez utiliser
$("#yourselector").attr("style", " ");
Il remplacera votre style en ligne par style=" "
Lorsque vous manipulez css avec jQuery, il l'ajoute en ligne et remplace tout css d'une feuille de style. Essayez d'utiliser jquery pour ajouter et supprimer une classe qui modifie la couleur au survol. Voici le violon qui fonctionne: http://jsfiddle.net/KVmCt/6/
jQuery ressemble à ceci:
$("div").hover(
function(){
$(this).addClass("blue");
}
,
function(){
$(this).removeClass("blue");
});
Un moyen simple serait d'ajouter la balise importante à votre CSS.
div:hover {
background-color: blue !important;
};