is(':hover')
非常有用,但有时它不起作用。
在谷歌浏览器中,我打开一个图像页面(我正在编写一个 chrome 扩展,内容脚本涉及 jquery),这不起作用,但在普通网页中它可以。
我怎么知道它是否有效?
我应该通过保存来扩展功能$.fn.is
并处理所有mousein
和mouseout
事件吗?
有什么建议么?
编辑
看起来 adeneo 的答案很好,但它不起作用。
关于yckart的回答,我觉得有些时候节点不会得到mouseleave
事件,所以这会打破悬停状态,这里需要一个条件。
我的 jQuery 版本是1.10
例如
我使用标签输入,当我移入输入区域时会显示标签选择器(一个 div 显示标签列表),当我移出输入区域时会隐藏标签选择器。所以当我离开输入区域时,我必须检查鼠标是否在选择器区域(添加延迟)?如果是,将不会隐藏选择器。当我离开选择器时,我必须检查鼠标是否在输入区域(添加延迟)?如果没有,隐藏选择器。
添加延迟以确保鼠标进入另一个区域并且我不能将选择器放入输入区域(如果可以,那么我不必检查鼠标离开或进入两个区域),作为子节点。
:hover 伪选择器在sizzle 文档中,我不认为这很糟糕。
为了保留我的代码,我想我应该添加$.expr[':'].hover
jQuery插件
在这里演示jsfiddle
我添加了一个:hovered
表达式作为插件,你可以is(':hovered')
直接使用。
第一次会返回false,也可以trackHover
在使用前调用is(':hovered')
。