【问题标题】:Recreating CSS pseudo-classes in jQuery在 jQuery 中重新创建 CSS 伪类
【发布时间】:2011-03-10 18:09:41
【问题描述】:

我正在尝试使用 jQuery 向我的导航栏添加一个小动画。现在我有导航栏的子菜单从 display:none 更改为 display:block 与 css :hover 伪类。正如我所说,我正在尝试使用 jQuery 来执行此操作,因此我需要创建一个类似于我在 css 中使用的选择器。我使用的选择器只会显示它的子列表:

#nav ul li:hover > ul

这很好用,但是我显然不能在 jQuery 选择器中使用 :hover 伪类,我尝试使用 .hover() 方法这样(这还没有任何动画):

 $('#nav ul li').hover(function() {
 $('#nav ul li').children('ul').css('display','block');
 }, function() {
 $('#nav ul li').children('ul').css('display','none');
 });

但是,如果我将鼠标悬停在 任何 列表项上,则会显示所有子菜单。以下是几个 jsfiddle 示例:

css 的样子(以及我想用 jQuery 重新创建的内容):http://jsfiddle.net/FHdLC/

上面 jQuery 代码的结果:http://jsfiddle.net/LBK3T/

非常感谢您提供的任何帮助!

【问题讨论】:

    标签: jquery css css-selectors pseudo-class


    【解决方案1】:

    使用this 来引用.hover() 处理程序中的当前元素,如下所示:

    $('#nav ul li').hover(function() {
       $(this).children('ul').css('display','block');
    }, function() {
       $(this).children('ul').css('display','none');
    });
    

    Here's your example working with the code above :)

    此外,您还可以使用 .toggle() 进一步缩短它,如下所示:

    $('#nav ul li').hover(function() {
       $(this).children('ul').toggle();
    });​
    

    You can test the .toggle() version here

    【讨论】:

    • 谢谢尼克,你似乎总是回答我所有的 jQuery 问题,而且它们总是很好的答案。非常感谢,我会尽快将其标记为正确答案。
    • 这比预期的效果更好!我使用了toggle方法,但将其更改为“slideToggle()”并超级轻松地实现了我的动画效果!再次感谢!
    • @Ben - 欢迎 :) 如果您因快速悬停进/出而遇到动画队列问题(堆积),请在 .sligeToggle() 之前添加一个 .stop(true, true) ;)
    猜你喜欢
    • 2015-04-30
    • 2011-03-24
    • 2014-07-13
    • 2010-10-03
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多