#javascript #jquery #bootstrap-4 #pagination
#javascript #jquery #bootstrap-4 #разбивка на страницы
Вопрос:
У меня есть большой набор данных кавычек в формате JSON, например
[
{
"Quote": "Don't cry because it's over, smile because it happened.",
"Author": "Eleanor Roosevelt, This is My Story",
"Category": "wisdom"
},
{
"Quote": "No one can make you feel inferior without your consent.",
"Author": "Dr. Seuss",
"Category": "life"
},
{
"Quote": ""Be yourself; everyone else is already taken.",
"Author": "Oscar Wilde",
"Category": "inspiration"
},
Поскольку это довольно большой набор данных, я хотел бы разбить его на страницы так, чтобы одновременно отображалось только 10. Я наткнулся на paginate.js плагин и попытался внедрить его в свой код. Я хочу стильно представить эти цитаты вместе с автором и категорией пользователям моего сайта (карточки, которые раскрываются при наведении курсора мыши).
Я могу получить и создать правильное количество записей / карточек для первой страницы, но проблема в том, что, похоже, нет других страниц или навигатора для перехода к другим кавычкам.
Как выглядит моя страница в настоящее время: https://i.stack.imgur.com/8GgQA.png
Как вы можете видеть на изображении, карточки созданы правильно, однако нет ссылок на другие кавычки, которые, я считаю, должны быть перед следующим разделом (маленький серый бит внизу изображения).
HTML:
<div class="row justify-content-center px-md-2" id="quotes">
<h4 class="pt-4">Quote Collection</h4>
<section class="col-12 p-4 d-flex" id="card-list">
<!-- Each card's markup looks like this from createQuoteCard() function from JS -->
<div class="card">
<div class="card-header">
<div id="category" class="text-center">
<span>
<p>Inspiration</p>
</span>
<img src="images/inspiration-quote.jfif" />
</div>
</div>
<div class="card-body">
<h2>
"I'm selfish, impatient and a little insecure. I make mistakes, I am
out of control and at times hard to handle. But if you can't handle
me at my worst, then you sure as hell don't deserve me at my best."
</h2>
</div>
<div class="card-footer">
<div class="author-name-prefix">Author</div>
Marilyn Monroe
</div>
</div>
<!-- End of card -->
</section>
</div>
JS-код:
$("#card-list").pagination({
dataSource: quotes,
pageSize: 10,
callback: function (data, pagination) {
$("#card-list").empty();
$.each(data, function (key, val) {
const card = createQuoteCard(val.Quote, val.Author, val.Category); // function that creates the card markup
$("#card-list").append(card);
});
},
});
Я ожидаю, что будет 3 страницы, поскольку я тестирую разбивку на страницы с 30 объектами / картами. Ошибок нет, и я не могу найти ничего неправильного в своем коде. Кто-нибудь может дать мне совет или указать мне правильное направление, это было бы с благодарностью.
Комментарии:
1. Создайте доступный для выполнения фрагмент кода.
2. jsfiddle.net/7ajqfsyw @Разван Замфир
Ответ №1:
Вы можете использовать afterRender события для того, чтобы переместить строку разбивки на страницы перед разделом card-list….so вы можете это видеть.
Ваша обновленная скрипка
Функция изменилась:
function paginateQuotes(quotes) {
let quoteCards = [];
$("#card-list").pagination({
dataSource: quotes,
pageSize: 10,
afterRender: function() { // added this event
if ($("#card-list div.paginationjs").length == 1) {
$("#card-list div.paginationjs").insertBefore("#card-list")
}
},
callback: function(data, pagination) {
$("#card-list").empty();
$.each(data, function(key, val) {
const card = createQuoteCard(val.Quote, val.Author, val.Category); // funtion that creates the card markup
$("#card-list").append(card);
});
},
});
}
Комментарии:
1. Спасибо, это отлично сработало с insertAfter() вместо insertBefore() .