Resposta original (e correta):
Você pode usar is()
e verificar o seletor :hover
.
var isHovered = $('#elem').is(":hover"); // returns true or false
Exemplo: http://jsfiddle.net/Meligy/2kyaJ/3/
(Isso funciona apenas quando o seletor corresponde a UM elemento no máximo. Consulte Editar 3 para obter mais informações)
.
Edit 1 (29 de junho de 2013): (Aplicável apenas ao jQuery 1.9.x, pois funciona com 1.10 ou superior, consulte o próximo Edit 2)
Esta resposta foi a melhor solução no momento em que a pergunta foi respondida. Esse seletor ': hover' foi removido com a .hover()
remoção do método no jQuery 1.9.x.
Curiosamente, uma resposta recente de "allicarn" mostra que é possível usar :hover
como seletor CSS (vs. Sizzle) quando você o prefixa com um seletor $($(this).selector + ":hover").length > 0
, e parece funcionar!
Além disso, o plugin hoverIntent mencionado em outra resposta também parece muito bom.
Edit 2 (21 de setembro de 2013): .is(":hover")
obras
Com base em outro comentário, notei que a maneira original que eu publiquei .is(":hover")
, na verdade ainda funciona no jQuery, então.
Funcionou no jQuery 1.7.x.
Ele parou de funcionar no 1.9.1, quando alguém me informou, e todos pensamos que estava relacionado ao jQuery remover o hover
alias para manipulação de eventos nessa versão.
Funcionou novamente no jQuery 1.10.1 e 2.0.2 (talvez 2.0.x), o que sugere que a falha no 1.9.x foi um bug ou, portanto, não um comportamento intencional, como pensamos no ponto anterior.
Se você quiser testar isso em uma versão específica do jQuery, basta abrir o exemplo JSFidlle no início desta resposta, mude para a versão desejada do jQuery e clique em "Executar". Se a cor mudar ao passar o mouse, funciona.
.
Edit 3 (9 de março de 2014): Funciona apenas quando a sequência jQuery contém um único elemento
Como mostra @Wilmer nos comentários, ele tem um violino que nem funciona contra as versões do jQuery que eu e outros aqui testamos. Quando tentei descobrir o que há de especial no caso dele, notei que ele estava tentando verificar vários elementos ao mesmo tempo. Isso estava jogando Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.
Então, trabalhando com seu violino, isso NÃO funciona:
var isHovered = !!$('#up, #down').filter(":hover").length;
Enquanto isso FAZ trabalho:
var isHovered = !!$('#up,#down').
filter(function() { return $(this).is(":hover"); }).length;
Também funciona com sequências jQuery que contêm um único elemento, como se o seletor original correspondesse a apenas um elemento ou se você solicitou .first()
os resultados, etc.
Isso também é mencionado no meu boletim JavaScript + Dicas e recursos do desenvolvedor da Web .