2013-02-06 74 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