web-dev-qa-db-ja.com

.is( ":hover")はjQuery1.9の時点で壊れています修正方法

$(...your selector here...).is(":hover")を実行すると、1.9.1より前のjQueryは正解を示しましたが、jQuery1.9.1は次のように示しています。

エラー:構文エラー、認識できない式:サポートされていない疑似:hover

これは、ホバーに対してアクションを実行することではありません。そのためには、.hover()を使用します。これは、任意の時点で、いくつかの要素がホバーされているかどうかを確認することについてです

答えてくれてありがとうムースマン フィドル でデモンストレーションします

14

セレクターが_#myid_であるとすると、$('#myid:hover')を使用する代わりに.is()を使用します。

$(this)または変数を使用している場合は、myVar.filter(':hover')を使用します。

17
Mooseman

ただし、jQuery.fn.is()を使用して、事前に認識されていない構成済みセレクターを使用して要素を比較する場合、上記の回避策は不適切であり、親コンテナー内のいくつかの要素と一致する可能性があります。

たとえば、以下のstyle_get()のselectorTextが次の値の場合、同じ例外がスローされます。

..ホバーが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;

}
0
luxigoo

.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 Gistを見ることができます: https://Gist.github.com/antydemant/74b00e27790e65f4555a29b73eea7bb2

0
Igor Ostapchuk