我使用jquery .css()
方法动态更改div的背景颜色。我还希望在同一个div上有一个CSS hover
选择器来改变背景颜色。似乎在使用jquery更改颜色之前,CSS hover
选择器可以正常工作,但在使用jquery方法更改div之后,CSS hover
选择器不再起作用。有没有办法解决这个问题(不使用jquery hover
方法)?
这是我所说的一个例子:http://jsfiddle.net/KVmCt/1/
答案 0 :(得分:43)
您遇到的问题是CSS信息位置的重要性:
外部样式表在文档的头部被CSS过度统治;反过来,它又被元素的style
属性中的CSS过度控制。基本上,浏览器遇到的最后一种样式会覆盖以前指定的任何规则,否则会产生冲突规则(除非使用!important
的关键字)。
作为JavaScript,因此jQuery将其CSS /样式信息放入元素的内嵌style
属性中,此始终会覆盖其他地方指定的冲突样式。
color: red
div
更重要的地方,忽略了div:hover
样式。
要解决此问题,您可以使用:
div:hover {
background-color: blue!important;
}
更好的解决方案是避免使用jQuery分配background-color
/其他样式,只使用CSS:
div {
background-color: red;
}
div:hover {
background-color: blue!important;
}
或者,您可以使用jQuery的hover()
方法:
$('div').css('background-color','red').hover(
function(){
$(this).css('background-color','blue');
},
function(){
$(this).css('background-color','red');
});
答案 1 :(得分: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;
}
你会发现它有效。
答案 2 :(得分:2)
当你使用jQuery操作css时,它会内联添加它并覆盖样式表中的任何css尝试使用jquery添加和删除一个更改悬停颜色的类。这是工作小提琴:http://jsfiddle.net/KVmCt/6/
jQuery看起来像这样:
$("div").hover(
function(){
$(this).addClass("blue");
}
,
function(){
$(this).removeClass("blue");
});
答案 3 :(得分:2)
如果您只需要删除内联样式,可以使用
$("#yourselector").attr("style", " ");
它将使用style=" "
答案 4 :(得分:0)
一种简单的方法是将重要标记添加到CSS中。
div:hover {
background-color: blue !important;
};