对html或jsp文章列表页面进行js分页,结合使用apache的url Rewrite和jquery

本文介绍了一种利用Apache URL重写功能实现SEO友好的分页技术。通过将分页URL美化为list-#.html的形式,并借助JavaScript动态生成分页导航,既提升了用户体验,又有利于搜索引擎抓取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在优化seo时,为了搜索引擎爬虫可以继续抓取分页内容,而分页数据不是数据库存储,所以需要在前台进行分页。通过apache的url Rewrite功能可以模拟类似  list-(##).html对应到list.html?pageNum=$1或list.jsp?pageNum=$1这样美化了url同时又符合seo要求。同时分页导航采取js动态生成


apache url Review配置:

RewriteRule   ^/test/list(-?)([0-9+]{1,}).html      /test/list.jsp?pageNum=$1 [PT,NC,L,QSA]


分页注意点:

首页:当页面设定记录数大于总记录数

尾页:当总记录数不能整除设定记录数

中间页:起始页计算和终点页计算


效果图




list.jsp

<div class="hlist">
<h1>保险学习</h1>
<ul id="tb3_dp_1">
<li><a href="/test1.html">tes1</a></li>

<li><a href="/test1.html">tes1</a></li>
......
</ul>
</div>



list.js

<script>
     jQuery(document).ready(function(){
    	 var pageSize = 10;//每页10条
    	 var pageNum = '<%=request.getParameter("pageNum")%>'+"";//获取参数
         var url = '/test/list&html';//前半部分为apache下的文件目录,后半部是相应文件在apache下的后缀如^/test/list(-?)([0-9+]{1,}).html 即html
         var pageNumMax = 5;//每页显示导航页码最大为10
         var items = jQuery('#tb3_dp_1 li');//需要处理的对象
    	 htmlPageSplit(pageSize,pageNum,url,pageNumMax,items);
     });


//文章 分页
function htmlPageSplit(pageSize,pageNum,url,pageNumMax,items){
    var recordTotal = -1;//总记录数 若为-1 则计算总数
    pageSize = isNaN(pageSize) || pageSize<1 ? 10 : parseInt(pageSize);//默认为每页10条记录
    pageNum =  isNaN(pageNum) || pageNum<1 ? 1 : parseInt(pageNum);//默认第一页
    var pageSizeTmp = pageSize;
    var count = 0;
    var pageTotal =0;//总页数
    
    if(recordTotal == -1){
        count = items.length;
        recordTotal = count;
    } 
    if(recordTotal<=pageSize){
        return;//总数少于pageSize 则不显示分页导航
    }
    pageTotal = getPageTotal(pageSize,recordTotal);//计算总页数
    pageNum = pageNum > pageTotal ? pageTotal : pageNum;
    
    showPageContent(pageNum,pageSize,pageTotal,recordTotal,items);
    
    showPageNav(pageNum,pageTotal,recordTotal,pageNumMax,url,items);
}

//计算总页数
function getPageTotal(pageSize,recordTotal){
    var pageTotal =0;
    if(recordTotal%pageSize==0){
        pageTotal = parseInt(recordTotal/pageSize);
    }else{
        pageTotal = parseInt(recordTotal/pageSize) + 1;
    }
    return pageTotal;
}

//显示该页内容
function showPageContent(pageNum,pageSize,pageTotal,recordTotal,items){
    var start = pageSize*(pageNum-1)+1;

    if(pageNum == pageTotal){
        pageSize = recordTotal%pageSize==0 ? pageSize : (recordTotal-pageSize*(pageNum-1));//计算最后一页 条数
    }
    
    var end = start+pageSize-1;
    
    items.each(function(n,i){
        if(n+1>=start && n+1<=end){
            jQuery(i).css("display","");
        }else{
            jQuery(i).css("display","none");
        }
    });
}

//获取该页面的分页导航要显示的位置
function getPageNavPosition(pageNum,pageNumMax){
    var j =0;
    if(parseInt(pageNum/pageNumMax) > 0 && pageNum%pageNumMax == 0){
        j = parseInt(pageNum/pageNumMax-1)*pageNumMax +1;
    }else if(parseInt(pageNum/pageNumMax) == 0 && pageNum%pageNumMax > 0){
        j = 1;
    }else{
        j = parseInt(pageNum/pageNumMax)*pageNumMax +1;
    }
    return j;
}

//显示分页导航
function showPageNav(pageNum,pageTotal,recordTotal,pageNumMax,url,items){
     var path = "";//列表页目录
     var suffix ="";//列表页文件在apache下的后缀
     var pageNav ="";
     var curPage="";//当前页码
     var curClass="";//当前页样式
     var strTmp ="";
     var navTotal =0;//导航页分页  总页数
     var j=1;
     var k=1;
     var jTmp=0;
     if(path==""){
         path = url.substring(0,url.indexOf("&"));
         suffix ='.'+url.substring(url.indexOf("&")+1);
         suffix = suffix.length==1 ? '.html' :suffix;
     }
     
    if(jQuery(items.parent()).find("div[class='listpage']")){
        jQuery(items.parent()).find("div[class='listpage']").remove();
    }
    pageNav ="<div class='listpage'>共 "+recordTotal+" 篇文章   ";
    
    navTotal = getPageTotal(pageNumMax,pageTotal);
    j = getPageNavPosition(pageNum,pageNumMax);
    k = j+pageNumMax-1;
    if(k>pageTotal){
        k = pageTotal;
    }
    jTmp = j;
    if(jTmp>pageNumMax){
        strTmp="<a href='"+path+"-"+(jTmp-1)+suffix+"'>...</a> "
    }
    if(pageNum!=1&&pageNum==2){
        pageNav += ("<a href='"+path+suffix+"'>首页</a> <a href='"+path+suffix+"'><<</a> "+strTmp);
    }else if(pageNum!=1){
        pageNav += ("<a href='"+path+suffix+"'>首页</a> <a href='"+path+"-"+(pageNum-1)+suffix+"'><<</a> "+strTmp);
    }
    for (;j<=k;j++){
        curPage="";
        if(j != 1){
            curPage="-"+j;
        }
        curClass="";
        if(pageNum == j)
            curClass=" class='on'";
       
        pageNav += ("<a href='"+path+curPage+suffix+"'"+curClass+">"+j+"</a> ");
    }
    if(j<pageTotal){
        pageNav += ("<a href='"+path+"-"+(j)+suffix+"'>...</a> ");
    }
    if(pageNum!=pageTotal){
        pageNav += ("<a href='"+path+"-"+(pageNum+1)+suffix+"'>>></a> <a href='"+path+"-"+pageTotal+suffix+"'>尾页</a> ");
    }
    pageNav += (" </div>");
    jQuery(items.parent()).append(pageNav);
}
 </script>








                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值