jQuery不支持和类

jQuery不支持和类,jquery,class,jquery-plugins,fade,Jquery,Class,Jquery Plugins,Fade,我有两个锚链接(a.selector),当单击其中一个时,它会应用一个类“active arrow”,单击还会从另一个锚中删除同名的类,并将不透明度降低到0.2 然后,当用户将鼠标悬停在没有应用“活动箭头”的锚点上时,我希望有一个淡入淡出的效果,这样当鼠标移动时,锚点将变为完全不透明度,当鼠标移动时,它将变回0.2 我遇到的问题是,.not和:not似乎没有按预期工作,悬停效果有效,但如果我在悬停时单击锚点,则会应用“活动箭头”类,但当鼠标移动时,不透明度会再次降低到0.2,即使应用了“活动箭头

我有两个锚链接(a.selector),当单击其中一个时,它会应用一个类“active arrow”,单击还会从另一个锚中删除同名的类,并将不透明度降低到0.2

然后,当用户将鼠标悬停在没有应用“活动箭头”的锚点上时,我希望有一个淡入淡出的效果,这样当鼠标移动时,锚点将变为完全不透明度,当鼠标移动时,它将变回0.2

我遇到的问题是,.not:not似乎没有按预期工作,悬停效果有效,但如果我在悬停时单击锚点,则会应用“活动箭头”类,但当鼠标移动时,不透明度会再次降低到0.2,即使应用了“活动箭头”类。另外,如果一个链接的“活动箭头”已被删除,则悬停对另一个链接不起作用

有点难解释,所以这里有一些代码,希望能有所帮助

*//If a.selector doesn't have the class 'active-arrow' then run the hoverFade function*
$("a.selector").not(".active-arrow").hoverFade();

//Functions for first element
        $('a.selector-1').click(function () {
            $('a.selector-2').removeClass('active-arrow'); //Remove background image from corresponding element
            $('ul#storage-items-2').fadeOut(1200).addClass('hide'); //Fade out then hide corresponding list
            $(this).addClass('active-arrow', 'fast'); //Add background image to current element
            $('ul#storage-items-1').removeClass('hide').fadeIn(1800); //Unhide and fade in the list
            $('a.selector-2').fadeTo(500, 0.2); //Fade corresponding element
            $(this).fadeTo(800, 1);//Fade this element to full opacity
        });
我只包含了第一个锚点(a.selector-1)的代码,因为第二个锚点的代码是相同的,但只是将类名更改为a.selector-2

另外,hoverFade函数在一个单独的文件中,因此我们可以重复使用它

    jQuery.fn.hoverFade = function() {
return this.each(function(){
        $(this).hover(
                function () {
                    $(this).fadeTo(500, 0.8);
            }, 
                function () {
                    $(this).fadeTo(500, 0.2);
        });
  });
}

每个锚链也会淡入淡出UL

非常感谢您的帮助

谢谢


Giles

在这种情况下,您需要使用或,如下所示:

$("a.selector:not(.active-arrow)").live('mouseenter', function () {
  $(this).fadeTo(500, 0.8);
}).live('mouseleave', function () {
  $(this).fadeTo(500, 0.2);
});
如果使用顶行,则该行如下所示(
ID
=所有这些链接的共享父级ID):

当前无法使用的原因是,它将事件处理程序绑定到元素,元素只需匹配您在找到它们进行绑定时使用的选择器,一旦发生这种情况,
mouseenter
mouseleave
事件处理程序就绑定到该元素上。类稍后更改的事实并不重要,处理程序将留在那里


使用上述方法,事件实际上并不直接位于元素上,而是位于父元素上,在
.live()
的情况下为
文档,在
.delegate()的情况下为
\ID
。当鼠标事件发生在一个元素上时,它们会冒泡,并且父元素看到它们,检查处理程序的选择器是否匹配,然后检查是否执行。这使得类更改实际上很重要,因为它是在事件发生时检查的,而不是在绑定时检查的。

非常好,谢谢你,尼克!我对jQuery很陌生,所以不知道.live或.delegate,它们非常有用。我曾经。生活在对我来说完美的最后。再次感谢Matehmm抱歉,我认为这已经解决了它,我认为javascript在我的浏览器中运行缓慢,因为它仍然无法工作。我尝试使用.delegate,如果我使用它,当mouseleave的不透明度应用于设置ID的父元素时。随着时间的推移,现场直播有点效果。如果我悬停,然后单击并等待其他事件运行,然后将鼠标移开很好,但是如果我直接单击并移开鼠标,则a选择器将再次淡出。有什么想法吗?Cheers@Giles-我建议不要设置
活动箭头的动画或检查其他类,因为如果设置动画速度,则该类不会应用(与我们想要的选择器匹配),直到找到该类的动画为止。所以要么做
$(this).addClass('active-arrow')
,或者只添加另一个类来进行跟踪,就像这样
$(this).addClass('aarrow').addClass('active-arrow','fast')
并在上面我的答案的选择器中使用它,确保以相同的方式删除该类,如下所示:
.removeClass('aarrow active arrow')(用空格删除多个)。是的,这就成功了,太棒了!不幸的是,我们需要设置“activearrow”类的动画,所以只需使用额外的类就可以了。再次感谢你,尼克!
$("#ID").delegate("a.selector:not(.active-arrow)", 'mouseenter', function () {