2013-02-06 68 views
0

我希望有一个简单的解决方案,但我不能在一分钟看到它。选择和动画所有div的班级,但忽略所有同级儿童

我试图选择所有与类myClass的div,但忽略所述类的所有孩子,包括那些类myClass。例如:

<div class="myClass"> //select 
    <div class="myClass"> //don't 
     <div class="myClass"></div> //don't etc 
    </div> 
</div> 
<div class="myClass"></div> 
<div class="myClass"> 
    <div class="myClass"></div> 
</div> 
<div class="myClass"></div> 

我知道这是一个奇怪的情况,它是从一个需要跨越谷歌地图滑动地图控制在侧DIV(以免覆盖它们)滑动时来一下。需要更改的类都被命名为“gmimoprint”,如果不忽略孩子,则父级内的元素将被移动两倍所需数量的每个级别的嵌套。

我目前的解决方案(更坏的黑客)是调用:

$('div.gmnoprint').stop().animate({ 'marginLeft': '418px' }, 800); 
$('div.gmnoprint').children('div.gmnoprint').stop().animate 
    ({ 'marginLeft': '0px' }, 800); 

但是,这是可怕的低效和处理器密集型。如果这是重复的,但我找不到任何类似的道歉。

任何帮助非常感谢。

+0

您需要定位父DOM元素而不是类本身。假设每个第一个实例都是共同父母的孩子,那么它不应该太难。 –

+0

如果您有父容器,那么您是否可以在开始时使用css选择器来选择直接的孩子,例如: $('#container> .myClass')。animate ..... –

回答

3
$('div.gmnoprint') 
    .filter(function() { 
     return $(this).parent().closest('div.gmnoprint').length === 0; 
    }) 
    .stop() 
    .animate({ 'marginLeft': '418px' }, 800); 
+0

完美谢谢,我不确定如何正确应用过滤条件排除儿童。 – Swires

0

这些div必须全部生活在另一个容器中。如果我们假设它的id是container,请致电:

$('#container').children('div.gmnoprint').stop().animate({ 'marginLeft': '418px' }, 800); 

这只会去一个层次深,而不是选择页面上的所有div.gmnoprint元素。

+0

不幸的是,有问题的容器似乎是一个空白的div sans id/class。 – Swires