js实现列表分页、查询(等细节处置)的功能

js实现列表分页及查询的功能

场景一:

某一天,后端开发同事说:这个列表的数据不是特别多,我一次传给你,你自己处理一下这些数据,OK不OK?

场景二:

项目经理:项目这里要做个列表页,不单独开发接口了,实现一下查询的功能就可以了。

大头答:有获取数据的接口吗?模糊查询还是精确查询?查询条件是多选还是单选?用UI组件库吗?

项目经理答:数据纯手工造,模糊查询嘛,一个或多个查询都可以晒!不合适。

 ······

细想片刻,我擦,还有分页要做?

捋捋思路,不用Element-UI组件库是吧?要实现列表页,主要就是实现分页以及查询噶,根据页码、是否查询来动态渲染页面数据,应该不是太难,好,开干!

需求分析

列表分页倒是没有什么太大的问题,根据设置的当前页大小拆分这个数组返回相对应的数组就行,引入查询之后呢?区别无非在于拆分的这个数组有所变化对吧,这是根据查询生成的一个新的数组,其他按部就班的来就没问题了。

参考Element-UI列表和分页的实现,通常,我们是将当前页、页面大小、查询条件一起返回后端,页面响应对应的数据就完成了。因此,这里我们可以封装一个方法就能实现这一需求,对吧!

功能实现

分页

分页一般来说,主要包括:上下页切换的功能、点击页码跳转某一页的功能以及直达某一页的功能,那目标就是正确的显示当前页的数据以及分页中的页码及其他数据,然后再注意一些其他的细节就可以了。

  1. 创建对应的html结构
<div class="list_page">
   <span class="page_prev" id="page_prev">
   	<a>上一页</a>
   </span>
   <span class="page_next" id="page_next">
   	<a>下一页</a>
   </span>
   <span class="page_text">跳转到</span>
   <span class="gopage">
   	<input type="text" value="1" id="gopage" name="gopage">
   </span>
   <span class="list_page_span">GO</span> </div>
 </div>

为啥没有页码?查询和不查询的页码肯定是分情况讨论的啊,所以页码由我们动态生成DOM去实现;
2. 生成页码及表格页面

  1. 确定分页大小、总页数
<script>
  	// 页面大小为15条,获取总页数
	window.totalPage = Math.ceil(pageData.length / 15)
<script>
  1. 获取对应分页上的数据
<script>
  	// 先获取当前页第一条数据和最后一条数据角码,进而分割字符串
    var startIndex = (pageIndex - 1) * 15;
    var endIndex = startIndex + 15;
    var tableData = pageData.slice(startIndex, endIndex)
<script>
  1. 页面数据渲染
    渲染数据的时候,咱是否应该处理掉当前页面上的表格数据,因此,首先清空表格里面原有的数据;之后给定表头的列表数据;然后我们就来循环渲染上面我们获取到的tableData;因为我这里的需求是表格是斑马条纹的样式,因此这里做了一个判断,进而得到奇数和偶数两个不同属性的数据;最后填充表格数据,就完成了表格对应的页面。
<script>
  	// 先获取当前页第一条数据和最后一条数据角码,进而分割字符串
    const table = document.getElementById("txl_table")
    table.innerHTML = ''
    var tableHtml = '<tr><th scope="col" style="width: 348px;">物品名称</th><th scope="col" style="width: 287px;">所属分类</th><th scope="col" style="width: 465px;">订购电话</th></tr>'
    for (let i = 0; i < tableData.length; i++) {
   
    if (i % 2 === 0) {
   
      tableHtml += '<tr>' + '<td align="center">' + tableData[i].unitName + '</td><td align = "center" > ' + tableData[i].jobIDName + '</td><td align="center">' + tableData[i].telephone + '</td>' + '</tr>'
      } else {
   
      tableHtml += '<tr class="even">' + '<td align="center">' + tableData[i].unitName +
      '</td><td align = "center" > ' + tableData[i].jobIDName + '</td><td align="center">' + tableData[i].telephone + '</td>' + '</tr>'
      }
    }
    table.innerHTML = tableHtml
	// 给页面直达的span标签赋值,也相当于是显示第几页
	document.getElementById('gopage').value = pageIndex
<script>
  1. 分页数据的渲染
    这里特别说明一下分页数据的渲染:假定我们有200条数据,分页大小为15,那么我们就有14页的数据,页码都要展示出来吗?那肯定是不需要的,展示五个页码就比较合适(如果对当前页页码有样式处理,奇数最为合适),当前页居中,对吧?如果是第九页,那我们就展示第七页、第八页、第九页、第十页、第十一页;第一页的话,就是一到五;第二页的话,也是一到五,因为没有-1页;第三页,也是一到五,且刚好居中满足我们的需求;以此类推,到第十二页的时候,对应的就是十到十四页对吧;再然后呢?为满足咱们的需求,第十三页和第十四页是不是应该只能往前推了呢,即十到十四。因此这里就是三种情况了,因此在渲染分页页面的时候就需要进行相应的一个判断;不过这里还有一种情况我们没有考虑到,如果一共就一页或者两页数据呢?这里即又是一种新的情况。
    因此,实现分页的时候,我们还要考虑四种情况。
    1. 调用同一个方法,因此,每次渲染对应数据的时候,我们应先清空之前的页面数据;
<script>
  // 查找页面上所有ID为“makeSpan”的span标签,然后删除
  var spanElements = document.querySelectorAll('#makeSpan');
  if (spanElements.length > 0) {
   
    spanElements.forEach(function (element) {
   
      element.remove();

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值