Jquery和:主动选择器

时间:2010-07-21 17:29:38

标签: jquery html css css-selectors

这是我的代码:

$('#ss a:active').parent().addClass('ss-active');

我想你可以从我的代码中看出我想要做什么,但它不起作用,我该怎么做?我也希望当用户从按钮中移开鼠标以恢复正常状态时,我的意思是:“用户从按钮中移除鼠标”是用户只能按住按钮一会儿它应该看到:active声明。

我无法用css执行此操作,因为我需要<a>的父级。

//在这里,我是如何运作的!

    $('#solicita a').mousedown(function() {
    if($(this).parent().hasClass('solicita-hover'))
    {
        $(this).parent().removeClass('solicita-hover');
        $(this).parent().addClass('solicita-active');
    }
}).mouseleave(function() {
    $(this).parent().removeClass('solicita-active');
});

4 个答案:

答案 0 :(得分:3)

尝试使用mousedown()事件:

$('#ss a').mousedown(function() {
 $(this).parent().addClass('ss-active');
}).mouseup(function() {
 $(this).parent().removeClass('ss-active');
});

答案 1 :(得分:3)

详细阐述了jQuery新手的答案

您应该对Javascript中发生的事情的顺序有所了解。当浏览器看到您编写的脚本时,它会从上到下一次解析一行(大部分)。

因此,当它在jQuery中读取CSS(Sizzle)选择器时,它将查看您指定的选择器的当前状态的文档。这意味着如果您编写$('#my-id div').addClass( 'some-class' ),它将在该特定时刻的id为my-id 的元素中查找div,并为其添加类。

如果您向#my-id添加更多div,他们将不会收到任何额外的类,因为当浏览器最初读取该Javascript行时,它们不存在。

所以在最初的问题中,当提问者写$('#ss a:active').parent().addClass('ss-active');时,浏览器只会在毫秒读取该行时查找#ss a:active

因此,我们必须绑定Javascript事件以便检测将来可能发生的事情

这就是为什么我们最终不得不做$('#ss a').mousedown( function ).mouseup( function )之类的事情。因为这会告诉jQuery和浏览器您正在等待(或 listening )事件发生。

答案 2 :(得分:1)

在jQuery中,“:”是他们所谓的元字符。 “:”后面的内容通常是jQuery选择器语法,如“:file”或“:has()”。

“:active”是一个CSS伪类,因此使用“:”来表示伪类与jQuery选择器语法要求相冲突。

所有这一切,您可以尝试使用jQuery api中建议的两个反斜杠转义“:”。但是,我没试过。

答案 3 :(得分:0)

你可以在合适的浏览器(Firefox,Chrome,IE10 +)中实际监听选择器规则匹配,方法是设置一个虚拟CSS关键帧,并在它与你正在收听的选择器匹配时监听animationstart事件。这是一篇博客文章,深入研究它的内容并提供一个小文档/元素扩展addSelectorListener,以便于使用:http://www.backalleycoder.com/2012/08/06/css-selector-listeners/