首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以通过JavaScript禁用CSS :hover效果吗?

我可以通过JavaScript禁用CSS :hover效果吗?
EN

Stack Overflow用户
提问于 2010-05-03 02:53:49
回答 9查看 150.2K关注 0票数 103

我试图通过JavaScript阻止浏览器使用CSS的:hover效果。

我在我的CSS中设置了aa:hover样式,因为如果JS不可用,我想要一个悬停效果。但如果JS可用,我想用更平滑的效果覆盖我的CSS hover效果(例如使用jQuery颜色插件)。

我试过这个:

代码语言:javascript
复制
$("ul#mainFilter a").hover(
     function(e){ e.preventDefault(); ...do my stuff... }, 
     function(e){ e.preventDefault(); ...do my stuff... });

我也在return false;上尝试过,但它不起作用。

下面是我的问题的一个例子:http://jsfiddle.net/4rEzz/。该链接应该只是淡入淡出而不会变灰。

正如fudgey所提到的,一种解决办法是使用.css()重置悬停样式,但我必须覆盖在CSS中指定的每个属性(参见此处:http://jsfiddle.net/raPeX/1/ )。我正在寻找一个通用的解决方案。

有人知道怎么做吗?

PS:我不想覆盖我为悬停设置的所有样式。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-05 07:20:06

恐怕没有一个纯粹的JavaScript通用解决方案。JavaScript本身不能关闭CSS :hover状态。

不过,您可以尝试以下替代解决方法。如果你不介意在你的超文本标记语言和CSS中浪费一点时间,它会帮你省去通过JavaScript手动重置每一个CSS属性的麻烦。

HTML

代码语言:javascript
复制
<body class="nojQuery">

CSS

代码语言:javascript
复制
/* Limit the hover styles in your CSS so that they only apply when the nojQuery 
class is present */

body.nojQuery ul#mainFilter a:hover {
    /* CSS-only hover styles go here */
}

JavaScript

代码语言:javascript
复制
// When jQuery kicks in, remove the nojQuery class from the <body> element, thus
// making the CSS hover styles disappear.

$(function(){}
    $('body').removeClass('nojQuery');
)
票数 138
EN

Stack Overflow用户

发布于 2014-09-25 02:30:33

使用仅指定了悬停的第二个类:

HTML

代码语言:javascript
复制
 <a class="myclass myclass_hover" href="#">My anchor</a>

CSS

代码语言:javascript
复制
 .myclass { 
   /* all anchor styles */
 }
 .myclass_hover:hover {
   /* example color */
   color:#00A;
 }

现在,您可以使用Jquery删除类,例如,如果元素已被单击:

JQUERY

代码语言:javascript
复制
 $('.myclass').click( function(e) {
    e.preventDefault();
    $(this).removeClass('myclass_hover');
 });

希望这个答案是有帮助的。

票数 16
EN

Stack Overflow用户

发布于 2010-05-05 07:02:44

您可以使用javascript操作样式表和样式表规则本身。

代码语言:javascript
复制
var sheetCount = document.styleSheets.length;
var lastSheet = document.styleSheets[sheetCount-1];
var ruleCount;
if (lastSheet.cssRules) { // Firefox uses 'cssRules'
    ruleCount = lastSheet.cssRules.length;
}
else if (lastSheet.rules) { / /IE uses 'rules'
    ruleCount = lastSheet.rules.length;
}
var newRule = "a:hover { text-decoration: none !important; color: #000 !important; }";
// insert as the last rule in the last sheet so it
// overrides (not overwrites) previous definitions
lastSheet.insertRule(newRule, ruleCount);

使属性变得重要并使其成为最后一个CSS定义应该覆盖任何以前的定义,除非有一个更有针对性的定义。在这种情况下,您可能需要插入更多规则。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2754546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档