Disons que j'ai une liste non ordonnée, comme ceci:
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
</ul>
Comment pourrais-je, à l'aide de JQuery, masquer les 2 derniers éléments de la liste et y avoir un lien "afficher plus", donc lorsque vous cliquez dessus, les 2 derniers éléments de la liste apparaissent?
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li style="display:none;">Four</li>
<li style="display:none;">Five</li>
<li>Show More</li>
</ul>
Essayez l'exemple de code suivant:
$('ul li:gt(3)').hide();
$('.show_button').click(function() {
$('ul li:gt(3)').show();
});
Pour le plaisir, voici une façon détournée de le faire en une seule chaîne:
$('ul')
.find('li:gt(3)')
.hide()
.end()
.append(
$('<li>Show More...</li>').click( function(){
$(this).siblings(':hidden').show().end().remove();
})
);
Je voulais seulement montrer le "show/hide" s'il était supérieur à max, donc je l'ai fait, en suivant Ken:
$('ul').each(function(){
var max = 6
if ($(this).find("li").length > max) {
$(this)
.find('li:gt('+max+')')
.hide()
.end()
.append(
$('<li>More...</li>').click( function(){
$(this).siblings(':hidden').show().end().remove();
})
);
}
});
Ce serait plus comme ça. Vous devez masquer les enfants supérieurs à 2, car Three est indexé comme 2. De plus, si vous souhaitez mettre le Show More dans une balise LI, vous devez inclure :not(:last-child)
dans votre sélecteur. Ainsi:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li><a href=# class=show>Show More</a></li>
</ul>
<script>$("li:gt(2):not(:last-child)").hide();
$('.show').click(function(){
$("li:gt(2)").show();
});
</script>
Vous pouvez essayer le Afficher les premiers N éléments Plugin jQuery . Tout ce que vous devez écrire est le suivant:
<ul class="show-first" data-show-first-count="3">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
</ul>
Il se convertira automatiquement en ceci:
<ul class="show-first" data-show-first-count="3">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li><a href="#" class="show-first-control">Show More</a></li>
<li style="display: none;">Four</li>
<li style="display: none;">Five</li>
</ul>
Et après avoir cliqué sur Afficher plus, il se convertira en ceci:
<ul class="show-first" data-show-first-count="3">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li style="display: none;"><a href="#" class="show-first-control">Show More</a></li>
<li style="display: list-item;">Four</li>
<li style="display: list-item;">Five</li>
</ul>
Pour info, j'ai contribué au code de ce plugin.
Après Ken et Cloud, j'ai ajouté une disposition pour que le bouton "Plus" se transforme en "Moins" et permute les éléments de liste pertinents.
$('.nav_accordian').each(function(){
var max = 6
if ($(this).find('li').length > max) {
$(this).find('li:gt('+max+')').hide().end().append('<li class="sub_accordian"><span class="show_more">(see more)</span></li>');
$('.sub_accordian').click( function(){
$(this).siblings(':gt('+max+')').toggle();
if ( $('.show_more').length ) {
$(this).html('<span class="show_less">(see less)</span>');
} else {
$(this).html('<span class="show_more">(see more)</span>');
};
});
};
});
Je suppose que vous commencez par l'UL selon votre exemple de code.
Je trouverais l'UL et cacherais les éléments supérieurs à l'index du dernier élément que vous souhaitez afficher initialement. Ensuite, j'ajouterais un nouvel élément pour servir de crochet pour afficher le reste. Enfin, je cacherais l'option Afficher plus car elle n'était plus nécessaire.
Voir ce qui suit:
$('ul li:gt(3)')
.hide()
.parent()
.append('<li onclick="$(this).parent().find(''li:gt(3)'').show();$(this).hide();">Show more</li>');