这是我的代码:
$('#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');
});
答案 0 :(得分:3)
尝试使用mousedown()事件:
$('#ss a').mousedown(function() {
$(this).parent().addClass('ss-active');
}).mouseup(function() {
$(this).parent().removeClass('ss-active');
});
答案 1 :(得分:3)
您应该对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/