JQuery загружает первые 3 элемента, нажмите "загрузить больше", чтобы отобразить следующие 5 элементов
У меня есть неупорядоченный список:
<ul id="myList"></ul>
<div id="loadMore">Load more</div>
Я хочу заполнить этот список элементами списка из другого файла 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>
Я хочу загрузить первые 3 элемента списка, а затем показать следующие 5 элементов, когда пользователь нажимает кнопку "load more":
$(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();
});
});
Мне нужна помощь, хотя я хотел бы, чтобы "загрузить больше", чтобы показать следующие 5 элементов списка, но если в файле HTML есть больше элементов списка, снова отобразите div "load more" и разрешите пользователям отобразите следующие 5 элементов, повторите это, пока не отобразится весь список.
Как я могу достичь этого?
Я создал следующий jsfiddle: http://jsfiddle.net/nFd7C/
Ответы
Ответ 1
ВНИМАНИЕ: size()
устарела в jQuery 1.8 и удалена в jQuery 3.0, вместо этого используйте .length
Рабочая демонстрация: 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();
});
});
Новый JS, чтобы показать или скрыть загрузку больше и показать меньше
$(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;
}
Рабочая демонстрация: http://jsfiddle.net/cse_tushar/6FzSb/2/
Ответ 2
Простые и с небольшими изменениями. А также скрыть загрузку больше, когда загружен весь список.
jsFiddle здесь.
$(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();
});
});
Ответ 3
Выражение $ (document).ready(function() устарело в jQuery3.
Смотрите рабочую скрипку с jQuery 3 здесь
Примите во внимание, что я не включил бессмысленную кнопку.
Вот код:
JS
$(function () {
x=3;
$('#myList li').slice(0, 3).show();
$('#loadMore').on('click', function (e) {
e.preventDefault();
x = x+5;
$('#myList li').slice(0, x).slideDown();
});
});
CSS
#myList li{display:none;
}
#loadMore {
color:green;
cursor:pointer;
}
#loadMore:hover {
color:black;
}
Ответ 4
Может ли кто-нибудь помочь, как сделать функцию без шоу с ломтик метода.