【发布时间】:2014-04-26 14:38:15
【问题描述】:
我正在尝试创建一个菜单,其中当前选择(单击)的元素具有与其他元素不同的背景颜色(我正在尝试使用 JavaScript 来实现这一点)。我还使用 CSS :hover 伪类通过突出显示悬停元素来突出它。但是,我遇到了一个奇怪的问题:当我用 JavaScript 设置任何元素的背景颜色时,它的 CSS 悬停行为不再起作用。也就是说,我不能再通过悬停来突出显示该元素。我已经在 Firefox 和 Chromium 中检查过了。 jQuery 和纯 JavaScript 都是这种情况。
代码如下。我已经简化了很多以缩小问题范围。首先尝试悬停任何菜单项,然后单击“设置背景颜色”链接并再次悬停其中一个菜单元素。我期望的是元素在悬停时变红(#f00),无论是否单击了“设置背景颜色”按钮。 对于 jsfiddle 链接,请转到底部。
原版 JavaScript:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
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;
}
</style>
<title>Background color</title>
</head>
<body>
<p id="links">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
<a href="#">Link 4</a>
</p>
<a href="#" id="setbgcolor">Set background color</a>
<script>
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';
};
</script>
</body>
</html>
jQuery:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="jquery-1.11.0.js"></script>
<style>
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;
}
</style>
<title>Background color</title>
</head>
<body>
<p id="links">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
<a href="#">Link 4</a>
</p>
<a href="#" id="setbgcolor">Set background color</a>
<script>
$('a#setbgcolor').click(function() {
$('p#links a').css('background-color', '#ff0');
});
</script>
</body>
</html>
为了方便起见,这里是 jsfiddle.net 链接:
纯 JavaScript:http://jsfiddle.net/5yQFM/1/
jQuery:http://jsfiddle.net/5yQFM/
【问题讨论】:
标签: javascript jquery css hover