[英]Setting background color with JavaScript breaks the CSS hover behavior
我正在嘗試創建一個菜單,其中當前選擇(單擊)的元素具有與其他元素不同的背景顏色(我正在嘗試使用 JavaScript 來實現)。 我還使用 CSS
:hover<\/code>偽類通過突出顯示懸停元素來突出它。
但是,我遇到了一個奇怪的問題:當我用 JavaScript 設置任何元素的背景顏色時,它的 CSS 懸停行為不再起作用。 也就是說,我不能再通過懸停來突出顯示該元素。 我已經在 Firefox 和 Chromium 中檢查過了。 jQuery 和純 JavaScript 都是這種情況。
代碼如下。 我已經簡化了很多以縮小問題范圍。 首先嘗試懸停任何菜單項,然后單擊“設置背景顏色”鏈接並再次懸停其中一個菜單元素。 我期望的是元素在懸停時變紅(#f00),無論是否單擊了“設置背景顏色”按鈕。 對於 jsfiddle 鏈接,請轉到底部。<\/strong>
香草 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>
通過添加類,如何在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
設置:hover
#links a:hover, .myClassForBackgrounds:hover { background-color:#ff0; }
您需要在懸停時使用!important
,基本上它將增加其優先級。
嘗試這個,
p#links a:hover {
background-color: #f00 !important;
}
正如Quentin所說的那樣,它看起來很臟,因此在這種情況下,我們可以使用類優先級概念。
HTML:
<a class='normal' href="#">Link 1</a>
<a class='normal' href="#">Link 1</a>
CSS:
.normal { background-color: blue; }
.abnormal{ background-color: yellow; }
.normal:hover { background-color: #f00; }
JS:
$('p#links a').attr('class', 'abnormal normal');
為了獲得更簡單的答案,只要能夠重新啟用CSS規則,只需在顏色和“”之間切換即可,因此
document.getElementById("id").style.backgroundColor = "rgb(255, 125, 15)";
如果該元素尚未通過javascript着色,則可能是這樣。 現在,如果您的元素已經着色,則代碼將如下所示:
document.getElementById("id").style.backgroundColor = "";
這將重新啟用CSS,以便選擇器可以工作。
我遇到了同樣的問題並通過這樣做解決了它:
我設置了一個 onmouseover 事件以將背景顏色更改為懸停顏色。
我設置了一個 onmouseout 事件來將背景顏色更改為默認顏色。
這樣我就用純javascript設置了一個懸停事件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.