![](/img/trans.png)
[英]javascript: backgroundColor not working on a <li> element
[英]:hover not working on <li> after backgroundColor change
我已经设法得到一个<ul>
,仅用几行原始的JavaScript代码打开和关闭显示,但是我遇到了一个问题。
我给出了<li>
来打开/关闭它的:hover
值(在这种情况下为灰色)。 我在<li>
上保留与<ul>
折叠时相同的颜色。 但是,当<ul>
显示关闭时,我将其恢复为以前的值,但:hover
值不再起作用。 有什么解决办法吗?
这是我的JavaScript:
function expandIt(obj) {
obj.nextSibling.style.display = "block";
obj.style.backgroundColor = "gray";};
function reduceIt(obj) {
obj.style.display = "none";
obj.previousSibling.style.backgroundColor = "white";};
这是HTML:
<ul>
<li onclick="expandIt(this)">ITEM</li>
<ul onclick="reduceIt(this)">
<li>subitem</li>
</ul>
</ul>
悬停与内联样式
解决方案是使用所需样式添加或删除类名称。 由于CSS的特殊性,任何直接放置在style
东西都将优先于CSS悬停定义中定义的规则。 结果是您的悬停永远不会记录背景颜色的变化。
兄弟姐妹的问题
您的代码的另一个问题是nextSibling
和previousSibling
将检查文本节点以及元素。 确保您要查看的是实际元素而不是文本节点,这是技巧。
这样的方法将确保您最终获得一个元素( .nodeType == 1
)
function expandIt(obj) {
var next = obj.nextSibling;
while(next && next.nodeType != 1)next = next.nextSibling;
next.style.display = "block";
obj.style.backgroundColor = "gray";
};
function reduceIt(obj) {
obj.style.display = "none";
var prev = obj.previousSibling;
while(prev && prev.nodeType != 1)prev = prev.previousSibling;
prev.style.backgroundColor = "white";
};
这是该概念的演示: http : //jsfiddle.net/Yu97H/
现在,即使使用该工作示例,也可以单击以将灰色设置为背景,但是鼠标悬停了。 一个简单的规则,例如ul li:hover { background-color: blue; }
ul li:hover { background-color: blue; }
将表现出该行为。
这是该行为的演示: http : //jsfiddle.net/Yu97H/1/
您可以在CSS中使用!important修饰符来进行此操作。 像这样:
ul li:hover {
background-color:#ccc !important;
}
这将覆盖内联样式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.