jquery - 触发 CSS :hover using jquery

标签 jquery css

我在这样的标签上应用了 css 规则

a { background-color: #000; }
a:hover {background-color: #ff0000; }

我想使用 jquery 触发它的悬停行为,这可能吗?这段代码运行良好,但没有将 bg 颜色更改为红色。

$('.me a').mouseenter();

为什么我需要这个? 我必须为我的 Web 应用程序的菜单编写自动化测试,这就是我需要的。

这里的重点是我可以使用 jquery 执行附加到 a:hover 的浏览器行为吗?

最佳答案

,您不能以编程方式设置悬停状态。

正如其他人所指出的,您可以通过编程方式设置类,并在悬停或分类时为元素使用相同的样式:

a.hover, a:hover { ... }

您可以使用 :focus 做类似的事情,它也可以通过编程方式设置 (demo)。

但是,您似乎只能在应用程序中触发 javascript,而不能更改其源代码的任何部分。在这种情况下,您必须做的是使用 java 脚本更改 css 规则本身。

在测试设置中,您可以将所有 :hover 样式更改为额外接受类名的样式:

function allowMockHover() {

    // iterate over all styleSheets
    for(var i = 0, l = document.styleSheets.length; i < l; i++) {
        var s = document.styleSheets[i];
        if(s.cssRules == null) continue;

        // iterate over all rules in styleSheet
        for(var x = 0, rl = s.cssRules.length; x < rl; x++) {
            var r = s.cssRules[x];
            if(r.selectorText && r.selectorText.indexOf(':hover') >= 0) {
               fixRule(r);
            }
        }
    }

}

function fixRule(rule) {

    // if the current rule has several selectors, treat them separately:
    var parts = rule.selectorText.split(',');
    for(var i = 0, l = parts.length; i < l; i++) {
        if(parts[i].indexOf(':hover') >= 0) {
           // update selector to be same + selector with class
           parts[i] = [ parts[i], parts[i].replace(/:hover/gi, '.mock-hover') ].join(',');
        }
    }

    // update rule
    rule.selectorText = parts.join(',');
}

Demo

关于jquery - 触发 CSS :hover using jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761939/

相关文章:

javascript - 在街景中显示 InfoWindow(使用 InfoBubble)

javascript - newsapi.org API 和 JQuery 的问题

html - 如何正确设置PNG边框图片

css - 延迟动画,让它在 Xs 之后往另一个方向走

html - 重复部分中的图像复选框

javascript - jquery 切换元素内的内容

jQuery 切换删除输入类型复选框

jquery - 复杂的 jQuery .hover 工作

html - Bootstrap - 不等宽度的表单元素占据完整的 .row

css - 所有可用的 CSS 颜色列表(用于背景)