2010-09-12 8 views
0

J'ai une classe de divs (« ouvert ») le contenir une autre classe de divs (« articles ») comme celui-ci:Jquery slideDown premiers éléments de niveau enfant

<div class="open"> 
    <div class="item"> 
    this is a test 1 
    </div> 

    <div class="item"> 
    this is a test 2 
    </div> 
</div> 

Ce que je cherche à faire est un slidedown de tous les divs de la classe 'item' qui se trouvent dans la classe 'open' sur laquelle vous avez cliqué.

Jusqu'à présent, j'ai

$(document).ready(function() { 

    $('.open').click(function() { 

     $(this).find(':first-child').slideDown('1000'); 

    }); 

mais il ne fonctionne pas. Des suggestions?

Merci, John

+1

Vos blocs de code sont un peu cassés. Mind re-formatage juste pour l'amour de la clarté? –

Répondre

3

Au lieu de :first-child que vous voulez enfants immédiats, que vous pouvez obtenir dans ce cas en utilisant .children(), comme ceci:

$('.open').click(function() { 
    $(this).children().slideDown('1000'); 
}); 

:first-child est pour obtenir le premier élément enfant à chaque niveau (et dans chaque "branche"), .children() ou child selector (>) sont pour obtenir tous les enfants immédiats/"premier niveau".

+0

Grands esprits ..... – Marko

2

Que diriez-vous

$(".open").click(function() { 
    $(this).children().slideDown(1000); 
}); 
+0

Nous avons répondu en même temps. Je pense que le mien est légèrement plus précis puisqu'il veut vraiment appeler seulement les enfants avec l'identification de «ouvrir», et vous pouvez certainement voir un cas marginal où il y a des enfants sans cette identification. –

+2

@Josh - Ses enfants ont une classe pas un ID, et c'est 'item', pas' open' :) –

+0

Ouais, je suis partout aujourd'hui. J'ai eu affaire à de terribles problèmes de CI et je suis plutôt fatigué. Merci pour la capture. –

0

D'abord, je suppose que vous fermez en fait hors du $(document).ready, puisque dans le bloc de code affiché, il est pas fermé. Assurez-vous de le faire dans votre code.

Deuxièmement, ne recherchez-vous pas simplement children() de .open? Dans ce cas, vous voulez

$(document).ready(function() { 
    $('.open').click(function() { 
    $(this).children('.item').slideDown('1000'); 
    }); 
}); 

Modifié: Merci aux commentaires, je l'ai retiré la suggestion live().

+0

Je pense que l'utilisation de live() dans ce cas est complètement inutile. – Marko

+2

'.live()' n'est pas toujours * meilleur *, donc le recommander comme habitude est une mauvaise idée, il doit être appliqué ou non en fonction de la situation. De plus, ses enfants n'ont pas de classe '.open', donc votre code n'aurait aucun effet :) –

+0

Oups. Je voulais dire '.item'. En fait, je ne le savais pas à propos de 'live()'. Je vais le garder à l'esprit. Merci! –