更改:使用JavaScript悬停CSS属性

sis*_*nts 75 html javascript css dhtml

我需要找到一种方法来改变CSS:使用JavaScript的悬停属性.

例如,假设我有这个HTML代码:

<table>
  <tr>
    <td>Hover 1</td>
    <td>Hover 2</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

以下CSS代码:

table td:hover {
background:#ff0000;
}
Run Code Online (Sandbox Code Playgroud)

我想使用JavaScript将<td>悬停属性更改为背景:#00ff00.知道我可以使用JavaScript访问样式背景属性:

document.getElementsByTagName("td").style.background="#00ff00";
Run Code Online (Sandbox Code Playgroud)

但是我不知道JavaScript的等价物:hover.如何更改这些<td>:使用JavaScript悬停背景?

非常感谢您的帮助!

ken*_*bec 87

伪类:hover从不引用元素,而是引用满足样式表规则条件的任何元素.您需要编辑样式表规则,附加新规则或添加包含新:hover规则的新样式表.

var css = 'table td:hover{ background-color: #00ff00 }';
var style = document.createElement('style');

if (style.styleSheet) {
    style.styleSheet.cssText = css;
} else {
    style.appendChild(document.createTextNode(css));
}

document.getElementsByTagName('head')[0].appendChild(style);
Run Code Online (Sandbox Code Playgroud)

  • :hover是一个[伪类](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes),而不是伪元素.伪元素以双冒号开头,例如:: after._/nitpick_ (8认同)
  • 为什么不知道新的`style`元素是否已经具有styleSheet? (2认同)

Ach*_*ave 34

无法:hover通过Javascript 更改或更改实际选择器.但是,您可以使用mouseenter更改样式,然后重新打开mouseleave(感谢@Bryan).

  • 请注意,您还需要绑定[`mouseleave`](https://developer.mozilla.org/en/DOM/DOM_event_reference/mouseleave)以反转效果. (5认同)
  • 真的没有办法用JavaScript改变:悬停选择器吗? (2认同)
  • 我一直在过去的项目中使用它,最近甚至尝试了公认的答案,但是在使用带有彩色按钮的悬停/活动元素时,这个总是占上风。只想说感谢您将此作为选项发布。 (2认同)

小智 12

您可以使用鼠标事件来控制,例如悬停。例如,当您将鼠标悬停在该元素上时,以下代码将变得可见。

var foo = document.getElementById("foo");
foo.addEventListener('mouseover',function(){
   foo.style.display="block";
})
foo.addEventListener('mouseleave',function(){
   foo.style.display="none";
})
Run Code Online (Sandbox Code Playgroud)


ybe*_*ntz 10

很老的问题,所以我想我会添加一个更现代的答案。现在 CSS 变量得到了广泛的支持,它们可以用来实现这一点,而无需 JS 事件或!important.

以 OP 为例:

<table>
  <tr>
    <td>Hover 1</td>
    <td>Hover 2</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我们现在可以在 CSS 中做到这一点:

table td:hover {
  // fallback in case we need to support older/non-supported browsers (IE, Opera mini)
  background: #ff0000;
  background: var(--td-background-color);
}
Run Code Online (Sandbox Code Playgroud)

并使用 javascript 添加悬停状态,如下所示:

const tds = document.querySelectorAll('td');
tds.forEach((td) => {
  td.style.setProperty('--td-background-color', '#00ff00');
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例https://codepen.io/ybentz/pen/RwPoeqb

  • 是的!JS 仍然无法定位 `:hover` 状态,但是 CSS 变量允许您通过 JS 更改变量的值来“绕过”它,而 CSS 代码不会改变。 (2认同)

Dav*_*tor 9

很抱歉找到这个页面已经晚了 7 年,但这里有一个更简单的方法来解决这个问题(任意更改悬停样式):

HTML:

<button id=Button>Button Title</button>
Run Code Online (Sandbox Code Playgroud)

CSS:

.HoverClass1:hover {color: blue !important; background-color: green !important;}
.HoverClass2:hover {color: red !important; background-color: yellow !important;}
Run Code Online (Sandbox Code Playgroud)

JavaScript:

var Button=document.getElementById('Button');
/* Clear all previous hover classes */
Button.classList.remove('HoverClass1','HoverClass2');
/* Set the desired hover class */
Button.classList.add('HoverClass1');
Run Code Online (Sandbox Code Playgroud)


isg*_*oed 8

您可以做的是更改对象的类并定义具有不同悬停属性的两个类.例如:

.stategood_enabled:hover  { background-color:green}
.stategood_enabled        { background-color:black}
.stategood_disabled:hover { background-color:red}
.stategood_disabled       { background-color:black}
Run Code Online (Sandbox Code Playgroud)

我发现: 用JavaScript改变元素的类

function changeClass(object,oldClass,newClass)
{
    // remove:
    //object.className = object.className.replace( /(?:^|\s)oldClass(?!\S)/g , '' );
    // replace:
    var regExp = new RegExp('(?:^|\\s)' + oldClass + '(?!\\S)', 'g');
    object.className = object.className.replace( regExp , newClass );
    // add
    //object.className += " "+newClass;
}

changeClass(myInput.submit,"stategood_disabled"," stategood_enabled");
Run Code Online (Sandbox Code Playgroud)


Nam*_*eja 7

如果它符合您的目的,您可以在不使用 css 和onmouseover在 javascript 中使用事件的情况下添加悬停功能

这是一个代码片段

<div id="mydiv">foo</div>

<script>
document.getElementById("mydiv").onmouseover = function() 
{
    this.style.backgroundColor = "blue";
}
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这将坚持新的风格,不会回到以前的风格! (2认同)
  • @Yahya - 您可以在鼠标移出事件时恢复此颜色。 (2认同)