:悬停选择器不适用于jQuery 1.4

时间:2010-01-18 15:33:34

标签: javascript jquery

用Google搜索 - 没有发现任何东西。 我在谈论CSS:悬停,而不是jQuery .hover()。 所以,代码:

$('#something a:hover').css({'something': 'thomesing'});

适用于1.3 ,但不适用于1.4。如何解决?

8 个答案:

答案 0 :(得分:15)

遵守规则
这是一个极好的例子,说明为什么我们必须始终根据文档进行编码,而不是根据可能性进行编码。黑客,或者像这样的疏忽,最终会被淘汰。

正确的jQuery(普通css更好)方法如下:

$("#something a").hover(
    function() { 
        // $(this).addClass("hovered");
        $(this).css("color", "red");   
    },
    function() { 
        // $(this).removeClass("hovered");
        $(this).css("color", "black"); 
    }
);

$.fn.hover method最多需要两个参数,并作为更明确的指针(鼠标)事件的语法糖。实际上,jQuery 2.1.0中的悬停方法只不过是这样:

function( fnOver, fnOut ) {
    return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}

了解您的代码,并简明扼要
如您所见,输入元素时会调用fnOver函数,退出时会再次调用(如果没有提供其他方法)。有了这种理解,我们可以设置更简单的指令:

$("#something a").hover(function () {
    $(this).toggleClass("hovered");
});

Native几乎总是胜利
最终,vanilla CSS是最佳选择。 :hover伪类已经around for a long time,不仅可以定位它所属的元素,还可以定位嵌套元素:

#something a:hover {
    background: red;
}

#something a:hover .icon {
    animation: 2s rotate ease-out;
}

有了:hover这样广泛支持的东西,我认为没有充分的理由可以避免它。

答案 1 :(得分:7)

:hover不是文档化的伪类选择器。

试试这个:

$('#something a').hover(function(){
                          $(this).css({'something': 'thomesing'});
                      },
                      function(){
                          $(this).css({'something': 'previous'});
                      });

虽然,你最好使用CSS类:

$('#something a').hover(function(){
                          $(this).toggleClass("over").toggleClass("out");
                      },
                      function(){
                          $(this).toggleClass("over").toggleClass("out");
                      });

http://docs.jquery.com/Events/hover

修改

在下面的BlueRaja评论中,以下内容更合适:

$('#something a').hover(function(){
                          $(this).addClass("over").removeClass("out");
                      },
                      function(){
                          $(this).removeClass("over").addClass("out");
                      });

答案 2 :(得分:4)

jQuery不支持

:悬停(请参阅docs)。

它也没有意义:jQuery选择器用于选择元素。什么会“:悬停”选择?

我很惊讶它甚至适用于1.3

答案 3 :(得分:4)

hover在1.4中发生了变化,有趣的是,这里的任何人似乎都无法检查jQuery文档......

$("#something a").hover(
  function () {
    $(this).toggleClass("active")
  }
);

通过css更改颜色。

注意:
致电$(selector).hover(handlerInOut)是简写:

$(selector).bind("mouseenter mouseleave",handlerInOut);

答案 4 :(得分:3)

我不认为它在1.3中有效。正如菲利普所说,它没有意义。

:悬停是一个事件,而不是一个属性。所以我看不出那个选择器是如何起作用的。

你可以使用悬停功能作为提到的antpaw - http://docs.jquery.com/Events/hover#overout

或者您可以设置css样式规则。 e.g。

$('head').append("<style type='text/css'>#something:hover{foo: bar}</style>");

答案 5 :(得分:2)

你可以使用.hover()函数甚至更好的普通css

答案 6 :(得分:0)

对我而言,该选择器没有多大意义,因为它取决于用户的事件。选择器更多地是关于静态内容,其中函数hover()可以跟踪事件。在您拨打电话时,用户必须将鼠标放在内容之上。

在某些情况下可能会有用,但在你提到的情况下,Jonathon Sampson有正确的答案。请改用$("#something a").hover(function() {$(this).css("something","thomesing");});

答案 7 :(得分:0)

jQuery如何工作是它解析选择器(无论是css还是常规选择器)然后返回jQuery对象。截至今天,jQuery不支持':hover'选择器。 它可能适用于Chrome或FF或Safari,但在IE6,7和8中肯定会失败。

很好的解决方法是使用jQuery的hover()方法。

在更复杂的情况下,您希望在要使用“:hover”选择的容器上注册mouseenter和mouseleave事件处理程序,并添加/删除“.hover”类。 一旦常规'hover'类存在,您可以使用'#container.hover'选择器从代码中的任何位置轻松访问该容器元素。

如果你需要帮助编码,请告诉我......