使用JavaScript设置背景颜色会破坏CSShover行为
我正在尝试创建一个菜单,其中当前所选(单击)元素具有与其他元素不同的背景颜色(我正在尝试使用JavaScript实现此目的)。 我还使用CSS :hover
伪类来突出显示hover元素。 但是,我遇到了一个奇怪的问题:当我使用JavaScript设置任何元素的背景颜色时,其CSShover行为不再有效。 也就是说,我不能再通过hover它突出显示该元素。 我已经在Firefox和Chromium中检查过了。 这是jQuery和普通JavaScript的情况。
代码如下。 我已经简化了很多来缩小问题的范围。 首先尝试hover任何菜单项,然后单击“设置背景颜色”链接并再次hover其中一个菜单元素。 无论是否单击“设置背景颜色”按钮,我期望hover时元素变红(#f00)。 对于jsfiddle链接,请转到底部。
香草JavaScript:
p#links a { display: inline-block; width: 80px; height: 22px; line-height: 22px; background-color: #00f; color: #fff; text-decoration: none; text-align: center; font-family: sans-serif; } p#links a:hover { background-color: #f00; } Background color Set background color document.getElementById('setbgcolor').onclick = function() { var p = document.getElementById('links'); var elements = p.getElementsByTagName('a'); for (var i = 0; i < elements.length; i++) elements[i].style.backgroundColor = '#ff0'; };
jQuery的:
p#links a { display: inline-block; width: 80px; height: 22px; line-height: 22px; background-color: #00f; color: #fff; text-decoration: none; text-align: center; font-family: sans-serif; } p#links a:hover { background-color: #f00; } Background color Set background color $('a#setbgcolor').click(function() { $('p#links a').css('background-color', '#ff0'); });
为方便起见,这里有jsfiddle.net链接:
纯JavaScript: http : //jsfiddle.net/5yQFM/1/
jQuery: http : //jsfiddle.net/5yQFM/
jQuery css()
方法映射到style
属性,该属性映射到style
属性。
style
属性中的规则比样式表中的规则更具体,因此总是在级联中跟在它们之后。
不是直接在元素上更改CSS,而是通过更改元素所属的类并使用预先准备好的样式表来更改它。
如何通过添加类来保持CSS中的样式而不是Javascript中的样式 ?
所以这一行:
elements[i].style.backgroundColor = '#ff0';
改成
elements[i].className = 'myClassForBackgrounds';
或者在jQ版本中
$('p#links a').css('background-color', '#ff0');
至 :
$('p#links a').addClass('myClassForBackgrounds');
这样你可以像往常一样设置你的:hover
#links a:hover, .myClassForBackgrounds:hover { background-color:#ff0; }
你需要在hover时使用!important
,基本上它会增加它的优先级。
试试这个,
p#links a:hover { background-color: #f00 !important; }
DEMO
正如Quentin所说它看起来像一个脏的,所以在这种情况下我们可以利用类优先级概念。
HTML:
Link 1 Link 1
CSS:
.normal { background-color: blue; } .abnormal{ background-color: yellow; } .normal:hover { background-color: #f00; }
JS:
$('p#links a').attr('class', 'abnormal normal');
DEMO非肮脏的一个
只是为了一个更简单的答案,能够重新启用css规则只需要在颜色和“”之间切换,所以
document.getElementById("id").style.backgroundColor = "rgb(255, 125, 15)";
如果元素还没有通过javascript着色。 现在,如果您的元素已经着色,代码将如下所示:
document.getElementById("id").style.backgroundColor = "";
这会重新启用CSS,这样你的选择器就可以工作了。