jQuery .not()过滤器不起作用

时间:2011-03-20 16:36:38

标签: jquery traversal

我已经尝试了很多方法从选择中过滤掉一个类,包括filter()和find(),但是无法使其工作。

我正在尝试为当前观看的视频创建“熄灯”功能。这是一段简单的代码,我必须做一些根本错误的事情......

您可以在www.jaygeorge.co.uk/gwennan-sage/showreel查看相应的代码。

应该发生什么:当你将鼠标悬停在“灯光”栏上时,一切都应该消失,除了最近的视频上有一个“播放”课程。

$(document).ready(function(){
$(".lightsout").hover(function() {
    $(this).next().addClass('playing');     
    $('body').not(".playing").animate({opacity: 0, backgroundColor: 'black'}, 1000);
});

});

3 个答案:

答案 0 :(得分:3)

你误解了.not method

  

给出一个代表的jQuery对象   一组DOM元素,.not()   method构造一个新的jQuery对象   来自匹配的子集   元素。提供的选择器是   测试每个元素;该   与选择器不匹配的元素   将包含在结果中。

这意味着您的查询$('body').not('.playing')会选择 不属于该 .playing的所有主体。

对于熄灯效果,通常通过创建100%宽度,100%高度div来实现,该div位于其余内容之上。

答案 1 :(得分:2)

更改此行

$('body').not(".playing").animate({opacity: 0, backgroundColor: 'black'}, 1000);

到这个

$('body *').not(".playing").animate({opacity: 0, backgroundColor: 'black'}, 1000);

答案 2 :(得分:1)

任何看这个的人的最终代码。解决方案取自http://www.jankoatwarpspeed.com/post/2009/05/17/Use-jQuery-to-turn-off-the-lights-while-watching-videos.aspx

//=Jay. Create div before Showreel.
$(document).ready(function(){
    $('.videopress').before("<div class='lightsout'><p>Once the video starts playing hover your mouse here to dim the lights.</p></div>");
    $('body').before("<div id='curtain'></div>");
});

//=Jay. Showreel Curtain down
$(document).ready(function(){
    $(".lightsout").hover(function(){
        $(this).next().addClass('playing');
        $('#curtain').delay(500).fadeIn();
    }, function(){
        $(this).next().removeClass('playing');
        $('#curtain').fadeOut();
    });
});

和CSS ...

/*=Jay. IE6 doesn't support Fixed positioning which is needed for the curtain below.*/
.ltie7 .lightsout {
    display: none;
}

.lightsout:hover {
    cursor: none;
}

#curtain {
    position: fixed;
    display: none;
    left:0; 
    top:0; 
    width:100%; 
    height: 100%;
    z-index:1000;
    background: black;
}

.playing {
    position: relative;
    z-index: 1001;
}