好多兄弟和我说,我写的只有分页不能搜索,今天给大家上个好家伙,和昨天不能搜索的版本合并了,老性子,直接上干货
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="./js/jquery-3.7.1.js"></script>
<style>
.data_content {
width: 60%;
margin-left: 20%;
display: flex;
flex-direction: column;
align-items: center;
background-color: antiquewhite;
}
.content_box {
margin: 10px 0;
padding: 10px;
border: 1px solid #ccc;
width: 80%;
display: flex;
justify-content: space-around;
}
.but_page {
display: flex;
justify-content: center;
margin-top: 20px;
}
.but_page button {
padding: 8px 16px;
margin: 0 5px;
background-color: #007bff;
color: #fff;
border: none;
cursor: pointer;
}
.but_page button:hover {
background-color: royalblue;
}
.twig {
line-height: 35px;
margin-left: 10px;
}
.page_datas {
margin-left: 500px;
margin-top: 15px;
}
.seek_box {
text-align: center;
margin-bottom: 30px;
}
.centent_ts {
width: 100%;
height: 50px;
font-size: 12px;
color: red;
text-align: center;
position: absolute;
top: 35px;
}
</style>
</head>
<body>
<!-- 搜索框 -->
<div class="seek_box">
<input type="text" class="input_value" />
<button onclick="scr()">搜索</button>
</div>
<!-- 存放数据 -->
<div class="data_content"></div>
<!-- 底部页码 -->
<div class="but_page"></div>
<!-- 页码跳转和每页数据 -->
<div class="page_datas">
<input type="number" class="href_but" />
<button onclick="href_page()">跳转</button>
<select name="" class="per_page">
<option value="10">每页10条数据</option>
<option value="5">每页5条数据</option>
<option value="15">每页15条数据</option>
</select>
</div>
<div class="centent_ts">
</div>
<script>
//全局变量
let data;
let num = 10; //每页数据
let k = 0; //第几页
let k_all; //一共多少页
// 请求假数据
$.ajax({
type: "GET",
url: "js/new_file.json",
success: function(res) {
data = res;
console.log(data);
applyColours(data);
},
});
// 渲染函数
function applyColours(data) {
k_all = Math.ceil(data.length / num); //获取到总共多少页
//渲染内容
let str = '';
for (let i = k * num; i < (k + 1) * num; i++) {
if (data[i] == undefined) {
break;
}
str += `
<div class="content_box">
<div>${data[i].id}</div>
<div>${data[i].name}</div>
<div>${data[i].gender}</div>
<div>${data[i].content}</div>
<div>${data[i].age}</div>
</div>`;
}
$('.data_content').html(str);
//渲染按钮
let std = ``;
std += `<button onclick="but_top()">上一页</button>`
for (let i = 0; i < k_all; i++) {
std += `<button onclick="buts(${i})">${i+1}</button>`
}
std += `<button onclick="but_bottom()">下一页</button>`
std += `<div class="twig">共${data.length}条</div>`
std += `<div class="twig">共${k_all}页</div>`
std += `<div class="twig">当前第${k+1}页</div>`
$('.but_page').html(std);
$(".but_page button").eq(k + 1).css("background-color", "aquamarine")
}
// 点击上一页事件
function but_top() {
if (k > 0) {
k--;
} else {
$('.centent_ts').html("当前已经是第一页")
setTimeout(function() {
$('.centent_ts').html("")
}, 2000);
}
console.log(k);
applyColours(data);
}
// 点击下一页事件
function but_bottom() {
if (k < k_all - 1) {
k++;
} else {
$('.centent_ts').html("当前已经是最后一页")
setTimeout(function() {
$('.centent_ts').html("")
}, 2000);
}
applyColours(data);
};
// 点击按钮跳转
function buts(da) {
k = da;
applyColours(data);
}
// 输入页码跳转事件
function href_page() {
// 获取输入框里面的值
k = $('.href_but').val() - 1;
// 判断是否执行渲染函数的条件
if (k >= 0 && k <= k_all - 1 && k % 1 === 0) {
applyColours(data);
} else {
//提示用户的内容
$('.centent_ts').html("请不要输入小数,负数")
//设置定时器,使提示用户的消息两秒后消失
setTimeout(function() {
$('.centent_ts').html("")
}, 2000);
}
}
// 每页数据
$('.per_page').on('change', function() {
// 使用户保持所在内容页
// 获取每页多少条数据
num = $('.per_page').val();
new_page = Math.ceil(data.length / num);
if (k <= new_page) {
applyColours(data);
} else {
k = new_page - 1;
applyColours(data);
}
console.log(new_page);
});
// 点击搜索
function scr() {
// 获取用户输入的值进行搜索
let input_value = $('.input_value').val();
// 定义一个空数组进行放入数据
let arr = [];
for (let i = 0; i < data.length; i++) {
//如果有相同的字样就把他放入数组中
if (data[i].name.indexOf(input_value) >= 0) {
arr.push(data[i]);
}
}
applyColours(arr);
}
console.log(k);
</script>
</body>
</html>