原始(正确)答案:
您可以使用
is()并检查选择器
:hover。
var isHovered = $('#elem').is(":hover"); // returns true or false(这仅在选择器最多匹配一个元素时有效。有关更多信息,请参见“编辑3”。)
。
编辑1(2013年6月29日):( 仅适用于jQuery 1.9.x,因为它与1.10+兼容,请参阅下一个编辑2)
在回答问题时,此答案是最好的解决方案。这个’:hover’选择器
.hover()在jQuery 1.9.x中被删除了。
有趣的是,“
allicarn”最近的回答显示,
:hover当您为选择器添加前缀时,可以将其用作CSS选择器(与Sizzle相对)
$($(this).selector+ ":hover").length > 0。
编辑2(2013年9月21日):
.is(":hover") 作品根据另一条评论,我注意到,我发布的原始方式
.is(":hover")实际上仍然可以在jQuery中使用,因此。它在jQuery 1.7.x中有效。
当有人向我报告它时,它在1.9.1中停止工作,我们都认为它与jQuery删除该
hover
版本中事件处理的别名有关。它在jQuery 1.10.1和2.0.2(也许是2.0.x)中再次起作用,这表明1.9.x中的失败是一个错误,或者不是我们先前所想的故意行为。
如果要在特定的jQuery版本中进行测试,只需在此答案的开头打开JSFidlle示例,更改为所需的jQuery版本,然后单击“运行”。如果颜色在悬停时发生变化,则可以使用。
。
编辑3(2014年3月9日):仅当jQuery序列包含单个元素时才有效
如@Wilmer在评论中所示,他有一个小提琴,甚至无法与我和此处其他人对其进行测试的jQuery版本一起使用。当我试图找到关于他的案子有什么特别之处时,我注意到他试图一次检查多个要素。这是投掷的
UncaughtError: Syntax error, unrecognized expression: unsupported pseudo: hover。
var isHovered = !!$('#up, #down').filter(":hover").length;虽然这 DOES 工作:
var isHovered = !!$('#up,#down'). filter(function() { return $(this).is(":hover"); }).length;它也适用于包含单个元素的jQuery序列,例如原始选择器仅匹配一个元素,或者您调用
.first()了结果等。我的Javascript + Web开发技巧和资源时事通讯也对此进行了引用。



