2011-09-15 3 views
2

J'utilise le dernier et le plus grand jQuery.jQuery - Quel est le moyen le plus efficace de filtrer les premier et deuxième éléments trouvés?

Je vais avoir un dix divs avec le contenu. Au chargement de la page, je dois fermer tous les divs sauf le premier et le second. Seuls les deux premiers divs je veux visible. Sous ces div deux visibles sont "montrer plus" et "montrer moins" boutons. Lorsque l'utilisateur clique sur le bouton Afficher plus, toutes les divs vont glisser vers le bas. Lorsque l'utilisateur clique sur le bouton Afficher moins, tous sauf les deux premiers divs doivent glisser vers le haut.

Je sais comment arriver au premier, le dernier, mais je ne sais pas comment filtrer le premier et le second élément. Je sais que je pourrais faire cela avec plus de bricolage que je ne l'ai déjà fait, mais je veux savoir la façon la plus efficace et la plus lisible de le faire. Pouvez-vous m'aider?

Un chargement de la page, cela devrait passer par et fermer tous, mais les premier et deuxième divs:

$(".BrandParagraph").each(function() { 
    // should close all but first and second 
    $(this).slideUp; 
}); 

$(".ShowMore").click(function() { 
    // slide down all 
    $(".BrandParagraph").slideDown(); 
}); 

$(".ShowMore").click(function() { 
    // slide up all but first and second 
    $(".BrandParagraph").slideDown(); 
}); 
+0

.EQ (i) traitera la liste des éléments retournés comme un tableau vous permettra d'éléments que vous voulez – kralco626

Répondre

5

Vous pouvez utiliser gt (n) pour sélectionner des éléments supérieurs à l'indice n:

$(".myDivs:gt(1)") 
+0

Oui, celui-ci a fonctionné absolument parfaitement et a utilisé le moins de code, et est très lisible . Merci!!! –

4

Essayez d'utiliser le greather que sélecteur d'index: jQuery :gt(n)

$(".BrandParagraph:gt(1)") 

vous devez modifier votre code à ceci:

$(".BrandParagraph:gt(1)").each(function() { 
    // should close all but first and second 
    $(this).slideUp; 
}); 

$(".ShowMore").click(function() { 
    // slide down all 
    $(".BrandParagraph").slideDown(); 
}); 

$(".ShowLess").click(function() { 
    // slide up all but first and second 
    $(".BrandParagraph:gt(1)").slideDown(); 
}); 
+0

et c'est pourquoi je ne l'ai pas poster mon commentaire comme une réponse ... :) savait que quelqu'un avait quelque chose de mieux :-p +1 – kralco626

+1

@ kralco626 ce n'est pas bon: P vous pouvez poster votre réponse de toute façon et si vous voulez vraiment, vous pouvez le supprimer en faveur d'un autre , mais ne laissez pas cela vous empêcher de fournir votre contribution à la communauté. –

+0

Vous n'avez pas besoin de 'each' dans la première ligne - vous pouvez simplement appeler' slideUp() 'sur la sélection. – Dennis

0

On dirait que vous êtes fini compliquant le problème ... j Ajoutez une classe à ceux qui sont les premiers à divs et sélectionnez-en une. Si votre plié sur la sélection que la première et la seconde, la syntaxe est $(selector).eq(0) et $(selector).eq(1)

1

Vous pouvez utiliser la méthode slice pour obtenir tous les articles sauf les deux premiers:

$(".BrandParagraph").slice(2).slideUp(); 
+0

Très bien, j'aime ça car ça peut prendre un deuxième paramètre à la fin ... http://api.jquery.com/slice/ – kralco626

0

Est-ce que cela fonctionnerait? Il semble simpliste, mais il devrait faire le travail ...

var divCount = 1; 

    $(".BrandParagraph").each(function() { 
    if(divCount >2){ 
    // should close all but first and second 
    $(this).slideUp; 
} 
else 
{ 
    divCount++; 
} 
}); 

$(".ShowMore").click(function() { 
    // slide down all 
    $(".BrandParagraph").slideDown(); 
}); 

$(".ShowMore").click(function() { 
    // slide up all but first and second 
    $(".BrandParagraph").slideDown(); 
}); 
+0

C'est la solution que j'aurais imaginé et que je voulais éviter. Les autres réponses sur la page sont super glissantes. Vérifiez-les. Merci pour votre réponse si. –

Questions connexes