.is( ": hover" ) сломан как jQuery 1.9 Как исправить

При выполнении $(...your selector here...).is(":hover") jQuery до 1.9.1 дал правильный ответ, а jQuery 1.9.1 говорит вам следующее:

Error: Syntax error, unrecognized expression: unsupported pseudo: hover

Вот обходной путь (отвечать не обязательно.)

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

краткий ответ, проверьте, является ли

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

имеет длину 1 и содержит соответствующий элемент.

Речь не идет о выполнении действия при наведении курсора - для этого просто используйте .hover() Речь идет о том, чтобы в произвольный момент времени выяснить, находится ли какой-либо элемент

Ответ 1

Предполагая, что ваш селектор #myid, используйте $('#myid:hover') вместо .is().

Если вы используете $(this) или переменную, используйте myVar.filter(':hover').

Ответ 2

Однако обходной путь выше непригоден, когда вы сравниваете элементы с помощью jQuery.fn.is() с сгенерированным селектором, который неизвестен заранее и который может соответствовать нескольким элементам в родительском контейнере.

например, то же самое исключение, когда 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: парить .mCSB_dragger.mCSB_dragger_bar"

.. потому что наведение не определено в 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;

}

Ответ 3

Вы можете попробовать использовать .filter()

Я думаю, что мое решение поможет вам:

//
// jQuery 3 pseudo ':hover' does not 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