.is(“:hover”)从jQuery 1.9开始被破坏如何修复

在做$(...your selector here...).is(":hover") ,1.9.1之前的jQuery给出了正确答案,而jQuery 1.9.1告诉你:

错误:语法错误,无法识别的表达式:unsupported pseudo: hover

这是一个解决方法(回答不必要。)

http://jsfiddle.net/mathheadinclouds/V342R/

简短的回答,检查是否

 .parent().find(":hover") 

长度为1,包含有问题的元素。

这不是关于在hover上执行操作 – 为此,只需使用.hover()这是关于,在任意时间点,找出某个元素是否正在盘旋

假设您的选择器是#myid ,请使用$('#myid:hover')而不是使用.is()

如果您使用$(this)或变量,请使用myVar.filter(':hover')

但是,当您使用jQuery.fn.is()将元素与预先未知的组合选择器进行比较时,上述解决方法是不合适的,并且可以匹配父容器中的多个元素。

例如,相同的exception时selectorText在style_get()下面是等于抛出: “.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover.mCSB_dragger .mCSB_dragger_bar”

..因为hover未在Sizzle.selectors.pseudos或Sizzle.selectors.setFilters(jquery-2.1.4,第1764行)中定义。

 function style_get(elem) { var sheets=document.styleSheets; var css_properties={}; elem=$(elem); for (var s in sheets) { var rules=sheets[s].rules || sheets[s].cssRules; for (var r in rules) { if (elem.is(rules[r].selectorText)) { css_properties=$.extend( css_properties, css.parse(rules[r].style), css.parse(elem.attr('style')) ); } } } return css_properties; } 

尝试将匿名函数放入.filter()

我想,我的解决方案可以帮到你:

 // // jQuery 3 pseudo ':hover' doesn't support // // Working on jQuery 1.7.1 $("*").on('click', $.proxy(function() { if ( this.$('.tooltip:hover').length > 0 ) { // jQuery 3.2.1 -> Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover console.log('Hovered!'); } else { console.log('Where is my element!?'); } }, this)); // Updated solution for jQuery 1.7.1 - 3.2.1 $("*").on('click', $.proxy(function() { var isHovered = $('.tooltip').filter(function() { return $(this).is(":hover"); }); if ( isHovered.length > 0 ) { console.log('Hovered!'); } else { console.log('Where is my element!?'); } }, this)); 

另外,你可以看到我的GitHub要点: https : //gist.github.com/antydemant/74b00e27790e65f4555a29b73eea7bb2