我正在开发一个博客网站,但在分页方面遇到一些问题。
在共享我的代码之前;
现在,代码:
$(document).ready(function () {
var pageItem = $('.pagination li').not('.prev,.next');
var prev = $('.pagination li.prev');
var next = $('.pagination li.next');
prev.addClass('disabled');
pageItem.first().addClass('active');
pageItem.click(function () {
pageItem.removeClass('active');
$(this).not('.prev,.next').addClass('active');
if ($(this).next().hasClass('next')) {
next.addClass('disabled');
prev.removeClass('disabled');
} else {
next.removeClass('disabled');
}
if ($(this).prev().hasClass('prev')) {
prev.addClass('disabled');
next.removeClass('disabled');
} else {
prev.removeClass('disabled');
}
});
next.click(function () {
$('li.active').removeClass('active').next().addClass('active');
if (next.prev().hasClass('active')) {
next.addClass('disabled');
prev.removeClass('disabled');
} else {
prev.removeClass('disabled');
}
});
prev.click(function () {
$('li.active').removeClass('active').prev().addClass('active');
if (prev.next().hasClass('active')) {
prev.addClass('disabled');
next.removeClass('disabled');
} else {
next.removeClass('disabled');
}
});
});
.pagination {
text-align: center;
margin-top: 50px;
margin-bottom: 15px;
}
.pagination li {
display: inline-block;
padding: 10px 15px;
border-radius: 10px;
transition: background-color 0.5s;
}
.pagination li a {
text-decoration: none;
font-size: 15px;
color: #7c3c01;
}
.disabled {
pointer-events: none;
}
.disabled a span {
color: #000000;
}
.active {
background-color: #e99d57;
color: #633001;
}
.pagination li:hover:not(.active) {
background-color: #f0b680;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="prev">
<a href="#" aria-label="Anterior">
<span aria-hidden="true">«</span>
</a>
</li>
<!--
Here's my php code to load the articles from db
<?php
// PAGINACION
$total_art = mysqli_num_rows($entradas);
$art_x_page = 4;
$pages = ceil($total_art / $art_x_page);
for ($i = 0; $i < $pages; $i++) : ?>
<li>
<a href="index.php?pagina=<?= $i + 1; ?>"><?= $i + 1; ?></a>
</li>
<?php endfor; ?>
To make the example work, i will add some static li
-->
<li>
<a href="#">1</a>
</li>
<li>
<a href="#">2</a>
</li>
<li>
<a href="#">3</a>
</li>
<li class="next">
<a href="#" aria-label="Siguiente">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
如果您测试我的分页,您会发现它工作得很好。 我的问题是php部分,当我添加它时,页面会重新加载以带来数据并刷新页面。因此样式/脚本不再起作用。每当页面重新加载时,样式都是相同的(.prev为.disabled,第一个li为.active)。
我需要的是从db加载数据而无需重新加载页面(因此我的样式/脚本仍然有效),或者在重新加载后修改脚本的方法。 我一直在阅读有关AJAX的文章,我认为这是我所需要的,但是我无法在我的代码中实现它,我认为我不太了解。
谢谢!
答案 0 :(得分:0)
您正在寻找的是ajaxs
来解决您的问题
所以可以说您当前的代码在content.php中
content.php
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="prev">
<a href="#" aria-label="Anterior">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page_num">
<a href="#">1</a>
</li>
<li class="page_num">
<a href="#">2</a>
</li>
<li class="page_num">
<a href="#">3</a>
</li>
<li class="next">
<a href="#" aria-label="Siguiente">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
<div id="result">
<!-- Load Data here -->
</div>
<script>
$( ".page_num").click(function(e) {
let page_num = $(this).text().trim();
$.ajax({
url: '/load_data.php', //location to your php file
type: 'POST',
data: {
page_num: page_num //data to send to the load_data.php file
},
success: function(data) {
$("#result").html(data);
}
});
});
</script>
load_data.php
<?php
$page_num = $_POST["page_num"];
//your php logic here
echo "MY Content";
?>
因此,基本上您在 load_data.php 文件中回显的所有内容都将在div id="result"
的 content.php 文件中得到输出
现在,这将加载您的内容而无需重新加载页面