2013-07-19 13 views
11

Mam nieuporządkowaną listę:load jQuery pierwsze 3 elementy, kliknij „obciążenie więcej”, aby wyświetlić następne 5 elementów

<ul id="myList"></ul> 
<div id="loadMore">Load more</div> 

życzę, aby wypełnić tę listę z elementów listy z innego pliku HTML:

<li>One</li> 
<li>Two</li> 
<li>Three</li> 
<li>Four</li> 
<li>Five</li> 
<li>Six</li> 
<li>Seven</li> 
<li>Eight</li> 
<li>Nine</li> 
<li>Ten</li> 
<li>Eleven</li> 
<li>Twelve</li> 
<li>Thirteen</li> 
<li>Fourteen</li> 
<li>Fifteen</li> 

Chcę załadować pierwsze 3 Wykaz przedmiotów, a następnie pokazać kolejne 5 pozycji, gdy użytkownik kliknie „załaduj więcej” div:

$(document).ready(function() { 
    // Load the first 3 list items from another HTML file 
    //$('#myList').load('externalList.html li:lt(3)'); 
    $('#myList li:lt(3)').show(); 
    $('#loadMore').click(function() { 
     $('#myList li:lt(10)').show(); 
    }); 
    $('#showLess').click(function() { 
     $('#myList li').not(':lt(3)').hide(); 
    }); 
}); 

Potrzebuję pomocy, ponieważ chciałbym "załadować więcej", aby pokazać następne 5 elementów listy, ale jeśli w pliku HTML znajduje się więcej elementów listy, to ponownie wyświetl "div" więcej i pozwól użytkownikom wyświetlać następne 5 pozycji, powtarzając to, aż wyświetli się cała lista.

Jak najlepiej to osiągnąć?

Stworzyłem następujące jsfiddle: http://jsfiddle.net/nFd7C/

+2

load() załaduje cały plik z $ .get a potem po prostu wykonać filtrowanie na stronie klienta, dlatego należy wczytać cały plik i wykonaj filtrowanie siebie zamiast wczytywania tej samej treści w kółko – adeneo

+0

Dzięki @adeneo Właśnie dokonałem edycji, aby zamiast wyświetlać następne 5 elementów listy zamiast ładowania. – JV10

Odpowiedz

32

Demo robocza: http://jsfiddle.net/cse_tushar/6FzSb/

$(document).ready(function() { 
    size_li = $("#myList li").size(); 
    x=3; 
    $('#myList li:lt('+x+')').show(); 
    $('#loadMore').click(function() { 
     x= (x+5 <= size_li) ? x+5 : size_li; 
     $('#myList li:lt('+x+')').show(); 
    }); 
    $('#showLess').click(function() { 
     x=(x-5<0) ? 3 : x-5; 
     $('#myList li').not(':lt('+x+')').hide(); 
    }); 
}); 


Nowy JS, aby pokazać lub ukryć załadować więcej i pokazać mniej

$(document).ready(function() { 
    size_li = $("#myList li").size(); 
    x=3; 
    $('#myList li:lt('+x+')').show(); 
    $('#loadMore').click(function() { 
     x= (x+5 <= size_li) ? x+5 : size_li; 
     $('#myList li:lt('+x+')').show(); 
     $('#showLess').show(); 
     if(x == size_li){ 
      $('#loadMore').hide(); 
     } 
    }); 
    $('#showLess').click(function() { 
     x=(x-5<0) ? 3 : x-5; 
     $('#myList li').not(':lt('+x+')').hide(); 
     $('#loadMore').show(); 
     $('#showLess').show(); 
     if(x == 3){ 
      $('#showLess').hide(); 
     } 
    }); 
}); 

CSS

#showLess { 
    color:red; 
    cursor:pointer; 
    display:none; 
} 

Demo pracy: http://jsfiddle.net/cse_tushar/6FzSb/2/

+0

To świetnie @ tushar-gupta, w jaki sposób mogę to zaimplementować z moją załadowaną listą? Jak mogę ukryć "załaduj więcej" po wyświetleniu całej listy? – JV10

+0

To działa dobrze @ tushar-gupta, ale jak mogę najpierw załadować mój plik externalList.html za pomocą tego skryptu? – JV10

+0

obejmują zewnętrzny plik HTML na stronie –

14

Proste i mało zmian. A także ukryj ładunek więcej po załadowaniu całej listy.

jsFiddle here.

$(document).ready(function() { 
    // Load the first 3 list items from another HTML file 
    //$('#myList').load('externalList.html li:lt(3)'); 
    $('#myList li:lt(3)').show(); 
    $('#showLess').hide(); 
    var items = 25; 
    var shown = 3; 
    $('#loadMore').click(function() { 
     $('#showLess').show(); 
     shown = $('#myList li:visible').size()+5; 
     if(shown< items) {$('#myList li:lt('+shown+')').show();} 
     else {$('#myList li:lt('+items+')').show(); 
      $('#loadMore').hide(); 
      } 
    }); 
    $('#showLess').click(function() { 
     $('#myList li').not(':lt(3)').hide(); 
    }); 
}); 
+1

Podoba mi się funkcja, która ukrywa link "pokaż więcej", gdy nie ma już więcej do pokazania. Wygląda schludniej. –

+5

Występuje problem w Twoim skrzypcach, najpierw załaduj więcej przedmiotów, a następnie pokaż mniej. Następnie załaduj więcej nie jest widoczny. Rozwinąłem twoje skrzypce i oto działa: http://jsfiddle.net/santosh_patnala/nFd7C/422/ – UiUx

+0

Witam, Jak mogę przystosować ten JS dla 3 różnych bloków? : -/Próbowałem dodawać różne identyfikatory, ale bez powodzenia. Jakieś sugestie? :) – user2513846

Powiązane problemy