JavaScript分页功能

简介: JavaScript分页功能

HTML结构这一部分自己想怎么写怎么写

<body>
    <div class="billboard">
 
    </div>
 
 
    <div class="table_box">
      <table class="serial">
        
        <thead>
          <tr>
            <td>Serial Number</td>
            <td>name</td>
            <td>age</td>
            <td>motto</td>
          </tr>
        </thead>
 
        <tbody>
 
        </tbody>
      </table>
 
    </div>
    <div class="box">
 
    </div>
 
    <script src="./js/paging.js"></script>
  </body>

我这里JS用的外联,代码马上呈现给兄弟们!

let data; // 用于存储从服务器获取的数据
let num = 5; // 每页显示的条目数
let k = 0; // 当前页数,初始化为0
let page;
let i;
let totalPages;
let endPage;
 
let xhr = new XMLHttpRequest(); // 创建一个新的 XMLHttpRequest 对象
// 设置请求方式和请求地址发送 GET 请求,请求的地址为 './js/paging.json',true 表示异步请求
xhr.open('get', './js/paging.json', true);
// 发送请求
xhr.send();
// 接收返回的响应数据
xhr.onreadystatechange = function () {
  if (xhr.readyState == 4 && xhr.status == 200) {
    // 将从服务器返回的 JSON 数据解析为 JavaScript 对象,并赋值给 data 变量
    data = JSON.parse(xhr.responseText);
    // 调用展示数据的函数 show,并传入获取的数据作为参数
    show(data);
    console.log(data);
  }
 
};
 
 
 
// 修改 show(data) 函数和相关部分
function show(data) {
  totalPages = Math.ceil(data.length / num); // 总页数
 
 
  // 计算显示页码的范围
  // if (totalPages <= 4) {
  //  startPage = 0;
  //  endPage = totalPages - 1;
  // } else {
  //  if (k <= 2) { // 当前页码在前3页
  //    startPage = 0;
  //    endPage = 3;
  //  } else if (k >= totalPages - 3) { // 当前页码在后3页
  //    startPage = totalPages - 4;
  //    endPage = totalPages - 1;
  //  } else { // 当前页码在中间部分
  //    startPage = k - 1;
  //    endPage = k + 1;
  //  }
  // }
 
  // 生成数据表格
  let str = '';
  let sti = ``;
  for (let i = k * num; i < (k + 1) * num; i++) {
    if (data[i] == undefined) break;
    str +=
      `<tr>
                <td>${i + 1}</td>
                <td>${data[i].name}</td>
                <td>${data[i].age}</td>
                <td>${data[i].motto}</td>
            </tr>`;
  }
  // 生成分页控件
  sti = `
        <div>第${k + 1}页</div>  ||
        <div>共${data.length}条数据</div> 
        <select id="show" onchange="selects()">
            <option>${num}条/页</option>
            <option value="5">5条/页</option>
            <option value="10">10条/页</option>
            <option value="20">20条/页</option>
        </select>
        <div class="homepage" onclick="end_page()">首页</div>
        <div class="homepage" onclick="pages()">上一页</div>`;
 
  if (totalPages < 6) {
    for (k = 0; k < totalPages; k++) {
      sti += `<div class="borders" onclick="clickreat(${k})">${k + 1}</div>`;
    }
  } else {
    if (k < 3) {
      sti += `<div class="tail_page" onclick="next(${0})" ${k == 0 ? 'style="background-color:pink;"' : '""'}>${1}</div>
      <div class="tail_page" onclick="next(${1})" ${k == 1 ? 'style="background-color:pink;";' : '"'} >${2}</div>
      <div class="tail_page" onclick="next(${2})" ${k == 2 ? 'style="background-color:pink;";' : '"'}>${3}</div>
      <div class="tail_page" onclick="next(${3})" ${k == 3 ?
          'style="background-color:pink;";' : '"'}>${4}</div>
      <div class="tail_page" onclick="next(${4})" ${k == 4 ? 'style="background-color:pink;";' : '"'}>${5}</div>...`;
 
    } else if (k > totalPages - 4) {
      sti +=
        `...<div class="tail_page" onclick="next(${totalPages - 5})" ${k == totalPages - 5 ? 'style="background-color:pink;";' : '"'}>${totalPages - 4}</div>
      <div class="tail_page" onclick="next(${totalPages - 4})" ${k == totalPages - 4 ? 'style="background-color:pink;";' : '"'}>${totalPages - 3}</div>
      <div class="tail_page" onclick="next(${totalPages - 3})" ${k == totalPages - 3 ? 'style="background-color:pink;";' : '"'}>${totalPages - 2}</div>
      <div class="tail_page" onclick="next(${totalPages - 2})" ${k == totalPages - 2 ? 'style="background-color:pink;";' : '"'}>${totalPages - 1}</div>
      <div class="tail_page" onclick="next(${totalPages - 1})" ${k == totalPages - 1 ? 'style="background-color:pink;";' : '"'}>${totalPages}</div>`;
    } else {
      sti += `...<div class="tail_page" onclick="sort(${k - 2})" >${k - 1}</div>
        <div class="tail_page" onclick="next(${k - 1})">${k}</div>
        <div class="tail_page" onclick="next(${k})" style="background:pink">${k + 1}</div>
        <div class="tail_page" onclick="next(${k + 1})">${k + 2}</div>
        <div class="tail_page" onclick="next(${k + 2})">${k + 3}</div>...`;
    }
  }
 
 
  sti += `
        前往<input type="text" class="butoo">页
        <div class="tail_page" onclick="next()">下一页</div>
        <div class="tail_page" onclick="trailer()">尾页</div>
    `;
 
  // 更新页面内容
  document.getElementsByTagName('tbody')[0].innerHTML = str;
  document.getElementsByClassName('box')[0].innerHTML = sti;
}
 
 
// 点击页码按钮跳转函数
function clickreat(index) {
  k = index;
  show(data);
}
 
 
// 下一页函数
function next() {
  // 已经到最后一页 不执行任何操作
  if (k == totalPages - 1) {
    alert('已经到底啦');
  } else {
    k++;
    console.log(k);
    // 显示下一页数据
  }
  show(data);
}
 
 
// 上一页函数
function pages() {
  k--;
  if (k < 0) {
    k = 0; // 如果已经是第一页,则保持在第一页
    alert("已经是第一页啦");
  }
  console.log(k);
  // 显示上一页数据
  show(data);
}
 
 
// 调回首页
function end_page() {
  k = 0;
  show(data)
}
 
 
// 尾页
function trailer() {
 
  k = totalPages - 1;
  show(data)
  // console.log(totalPages);
}
 
 
// 键盘事件,按下回车跳转指定页
document.addEventListener("keydown", function (e) {
  if (e.key === "Enter") {
    // 获取输入框的值并去除首尾空格
    let value = document.getElementsByClassName('butoo')[0].value.trim();
    // 检查输入的值是否为有效的整数
    if (Number.isInteger(Number(value)) && parseInt(value) > 0 && parseInt(value) <= totalPages) {
      k = parseInt(value) - 1; // 设置跳转页数 从0开始
      show(data); // 显示指定页数据
    } else {
      alert("请输入有效的页码数!"); // 提示输入无效页码
      // 清空输入框内容或者恢复到之前的有效选项
    }
    // document.getElementsByClassName('butoo')[0].value = '';
  }
});
 
 
// select下拉框事件,改变每页显示条目数
function selects() {
  k = 0;
  let value = document.getElementById('show').value;
  //  更新每页显示条目数
  num = value;
  // 重新计算总页数
  totalPages = Math.ceil(data.length / num);
  show(data);
}

显示多条数据那里20条有点小小的毛病哪位大神给找一下发我呢感谢

相关文章
|
11天前
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
11天前
|
存储 文字识别 前端开发
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
|
2月前
|
JavaScript 安全 前端开发
js实现复制功能
js实现复制功能
16 1
|
2月前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
34 0
|
2月前
|
JavaScript 前端开发 开发者
Vue.js的未来已来:掌握最新功能,驾驭前端开发的新浪潮!
【8月更文挑战第30天】Vue.js作为前端开发领域的明星框架,凭借其轻量级、响应式及组件化特性,深受全球开发者喜爱。它持续进化,引入新功能并优化性能,如提升渲染速度和减小打包体积,增强TypeScript支持,简化组件编写流程,进一步提升应用响应性和加载速度,改善开发者体验。活跃的社区和丰富的开源项目如“vuejs-challenges”推动其不断发展。未来,Vue.js将探索更多新特性,如宏和非虚拟DOM模式,巩固其在现代前端框架中的领先地位。
46 0
|
2月前
|
JavaScript 前端开发
Next js:点击登录显示登录表单,点击注册显示注册表单的功能
本文提供了一个Next.js中使用React状态管理实现点击按钮切换显示登录和注册表单的功能示例,包括创建`authform.tsx`组件和在页面组件中引入使用的方法。
|
2月前
|
JavaScript 索引
js倒计时功能
js倒计时功能
33 0
|
2月前
|
JavaScript
js替换敏感词功能
js替换敏感词功能
14 0
|
2月前
|
JavaScript
js团队筛选功能
js团队筛选功能
16 0
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
79 2