『壹』 js的分頁原理以及實現步驟是什麼
主要是借鑒了網上一個例子,修改了一些小地方,前端分頁的技巧,表格的數據是已經寫好了,可以前端渲染表格然後再分頁,都是可以的。
其實分頁最關鍵是這兩句:
var startRow = (currentPage - 1) * pageSize+1; //currentPage 為當前頁,pageSize為每頁顯示的數據量
var endRow = currentPage * pageSize;
找到我們需要顯示的行的范圍(starRow~endRow)
ps:這里在跳轉的時候遇到了一個小BUG,就是獲取到的select的value值是string類型的,比如獲取到了1,然後你想再加1的時候就會變成"11" 而不是我們想要的"2",所以這里需要用parseInt( )來轉換一下,小細節需要注意呀!!!
效果圖:
[javascript] view plain print?
<!doctypehtml>
<html>
<head>
<metacharset='utf-8'>
<styletype="text/css">
a{
text-decoration:none;
}
.table2{
border:#C8C8C8solid;
border-width:1px0px0px1px;
background:#F3F0F0;
margin-top:25px;
}
.td0{
border:#C8C8C8solid;
border-width:001px0;
}
.td2{
border:#C8C8C8solid;
border-width:01px1px0;
}
.barcon{
width:1000px;
margin:0auto;
text-align:center;
}
.barcon1{
font-size:17px;
float:left;
margin-top:20px;
}
.barcon2{
float:right;
}
.barcon2ul{
margin:20px0;
padding-left:0;
list-style:none;
text-align:center;
}
.barcon2li{
display:inline;
}
.barcon2a{
font-size:16px;
font-weight:normal;
display:inline-block;
padding:5px;
padding-top:0;
color:black;
border:1pxsolid#ddd;
background-color:#fff;
}
.barcon2a:hover{
background-color:#eee;
}
.ban{
opacity:.4;
}
</style>
</head>
<body>
<tablewidth="950"cellpadding="0"cellspacing="0"class="table2"align="center">
<thead>
<tr>
<tdcolspan="3"height="33"class="td0"></td>
<tdalign="center"class="td2"><ahref="###">添加用戶</a></td>
</tr>
<tralign="center">
<thwidth="150"height="33"class="td2">序號</th>
<thwidth="300"class="td2">用戶名</th>
<thwidth="250"class="td2">許可權</th>
<thwidth="250"class="td2">操作</th>
</tr>
</thead>
<tbodyid="adminTbody">
<tralign="center">
<tdclass="td2"height="33"width="150">1</td>
<tdclass="td2">admin</td>
<tdclass="td2">管理員</td>
<tdclass="td2"><ahref="###">修改</a></td>
</tr>
</tbody>
</table>
<divid="barcon"class="barcon">
<divid="barcon1"class="barcon1"></div>
<divid="barcon2"class="barcon2">
<ul>
<li><ahref="###"id="firstPage">首頁</a></li>
<li><ahref="###"id="prePage">上一頁</a></li>
<li><ahref="###"id="nextPage">下一頁</a></li>
<li><ahref="###"id="lastPage">尾頁</a></li>
<li><selectid="jumpWhere">
</select></li>
<li><ahref="###"id="jumpPage"onclick="jumpPage()">跳轉</a></li>
</ul>
</div>
</div>
<scriptsrc="jquery.js"></script>
<script>
/*動態生成用戶函數
num為生成的用戶數量
*/
functiondynamicAddUser(num){
for(vari=1;i<=num;i++)
{
vartrNode=document.createElement("tr");
$(trNode).attr("align","center");
//序號
vartdNodeNum=document.createElement("td");
$(tdNodeNum).html(i+1);
tdNodeNum.style.width="150px";
tdNodeNum.style.height="33px";
tdNodeNum.className="td2";
//用戶名
vartdNodeName=document.createElement("td");
$(tdNodeName).html("lzj"+i);
tdNodeName.style.width="300px";
tdNodeName.className="td2";
//許可權
vartdNodePri=document.createElement("td");
tdNodePri.style.width="250px";
tdNodePri.className="td2";
varpriText=document.createElement("span");
$(priText).css({"display":"inline-block","text-align":"center"});
$(priText).text("普通用戶");
tdNodePri.appendChild(priText);
//操作
vartdNodeOper=document.createElement("td");
tdNodeOper.style.width="170px";
tdNodeOper.className="td2";
vareditA=document.createElement("a");
$(editA).attr("href","###").text("編輯");
$(editA).css({display:"inline-block"});
tdNodeOper.appendChild(editA);
trNode.appendChild(tdNodeNum);
trNode.appendChild(tdNodeName);
trNode.appendChild(tdNodePri);
trNode.appendChild(tdNodeOper);
$("#adminTbody")[0].appendChild(trNode);
}
}
$(function(){
dynamicAddUser(80);
goPage(1,10);
vartempOption="";
for(vari=1;i<=totalPage;i++)
{
tempOption+='<optionvalue='+i+'>'+i+'</option>'
}
$("#jumpWhere").html(tempOption);
})
/**
*分頁函數
*pno--頁數
*psize--每頁顯示記錄數
*分頁部分是從真實數據行開始,因而存在加減某個常數,以確定真正的記錄數
*純js分頁實質是數據行全部載入,通過是否顯示屬性完成分頁功能
**/
varpageSize=0;//每頁顯示行數
varcurrentPage_=1;//當前頁全局變數,用於跳轉時判斷是否在相同頁,在就不跳,否則跳轉。
vartotalPage;//總頁數
functiongoPage(pno,psize){
varitable=document.getElementById("adminTbody");
varnum=itable.rows.length;//表格所有行數(所有記錄數)
pageSize=psize;//每頁顯示行數
//總共分幾頁
if(num/pageSize>parseInt(num/pageSize)){
totalPage=parseInt(num/pageSize)+1;
}else{
totalPage=parseInt(num/pageSize);
}
varcurrentPage=pno;//當前頁數
currentPage_=currentPage;
varstartRow=(currentPage-1)*pageSize+1;
varendRow=currentPage*pageSize;
endRow=(endRow>num)?num:endRow;
//遍歷顯示數據實現分頁
/*for(vari=1;i<(num+1);i++){
varirow=itable.rows[i-1];
if(i>=startRow&&i<=endRow){
irow.style.display="";
}else{
irow.style.display="none";
}
}*/
$("#adminTbodytr").hide();
for(vari=startRow-1;i<endRow;i++)
{
$("#adminTbodytr").eq(i).show();
}
vartempStr="共"+num+"條記錄分"+totalPage+"頁當前第"+currentPage+"頁";
document.getElementById("barcon1").innerHTML=tempStr;
if(currentPage>1){
$("#firstPage").on("click",function(){
goPage(1,psize);
}).removeClass("ban");
$("#prePage").on("click",function(){
goPage(currentPage-1,psize);
}).removeClass("ban");
}else{
$("#firstPage").off("click").addClass("ban");
$("#prePage").off("click").addClass("ban");
}
if(currentPage<totalPage){
$("#nextPage").on("click",function(){
goPage(currentPage+1,psize);
}).removeClass("ban")
$("#lastPage").on("click",function(){
goPage(totalPage,psize);
}).removeClass("ban")
}else{
$("#nextPage").off("click").addClass("ban");
$("#lastPage").off("click").addClass("ban");
}
$("#jumpWhere").val(currentPage);
}
functionjumpPage()
{
varnum=parseInt($("#jumpWhere").val());
if(num!=currentPage_)
{
goPage(num,pageSize);
}
}
</script>
</body>
</html>
『貳』 前端開發 需要根據把後台數據列表 分頁顯示
搭建項目分頁
1.jsp頁面
<tr>
<td bgcolor="#00ffff" colspan="10" align="center">
第${pager.currentPage}頁
每頁${pager.pageSize} 條記錄
共${pager.totalPages}頁
共${pager.totalRows} 條
<a href="servlet/UserServlet?num=1&page=1" >首頁</a>
<a href="servlet/UserServlet?num=1&page=${pager.currentPage-1}">上一頁</a>
<a href="servlet/UserServlet?num=1&page=${pager.currentPage+1}">下一頁</a>
<a href="servlet/UserServlet?num=1&page=${pager.totalPages}">末頁</a>
</td>
</tr>
2.拼接sql語句
SELECT * FROM USERS LEFT JOIN DEPT ON USERDEPT=DEPTNUM
SELECT * FROM(SELECT A.*, ROWNUM RN FROM (SELECT * FROM student) A WHERE ROWNUM <=15)WHERE RN >=11 ORDER BY ENTERDATE
分頁sql:SELECT * FROM(SELECT A.*, ROWNUM RN FROM (SELECT * FROM USERS LEFT JOIN DEPT ON USERDEPT=DEPTNUM) A WHERE ROWNUM <=15)WHERE RN >=11 ORDER BY ENTERDATE
3.分頁工具類導入到common包:Pager.java
在servlet調用:第一個條件:總條數 第二個條件:當前頁數
String page = request.getParameter("page");
//分頁調用開始--------------------------------
Pager pager = new Pager();
int totalRows = userService.getCountRows();
pager.setTotalRows(totalRows);
if(null != page){
pager.setCurrentPage(Integer.parseInt(page));
}else{
pager.setCurrentPage(1);
}
request.setAttribute("pager", pager);//給頁面分頁賦值
4.把pager工具類傳遞到,拼接執行動態分頁sql語句
開始條數:pager.getStartRow()
結束條:pager.getCurrentPage()*pager.getPageSize()
String sql="SELECT * FROM(SELECT A.*, ROWNUM RN FROM (SELECT * FROM USERS LEFT JOIN DEPT ON USERDEPT=DEPTNUM) A WHERE ROWNUM <="+pager.getCurrentPage() *pager.getPageSize()+")WHERE RN >="+pager.getStartRow();//分頁sql 1-3條
分頁根本條件:
private int totalRows; //總行數
private int pageSize = 5; //每頁顯示的行數
private int currentPage=1; //當前頁號
private int totalPages; //總頁數
private int startRow; //當前頁在資料庫中的起始行
private int endRow; //資料庫執行sql的結束行
totalPages演算法:
if(totalRows<=pageSize){
totalPages=1;
}else{
totalPages=(totalRows+pageSize-1)/pageSize;
}
startRow; 演算法:
startRow=(currentPage-1) * pageSize+1;
endRow; endRow=currentPage* pageSize;
『叄』 前端一下獲取所有數據怎麼實現分頁
grid的分頁功能本身就是對資料庫數據分頁後的一個數據顯示,並可以執行翻頁查詢其他頁的信息。全部信息則只需要將limit參數設置為數據總條數,pagesize也設置為數據行數。grid中不設置分頁組件是可以直接顯示全部信息,url中不設置limit和start參數。注:數據量太多時不宜全部顯示
『肆』 前端富文本如何分頁顯示
使用Spannable 設置樣式Spannable 可以對顏色和字體粗細等屬性進行樣式設置。首先使用 SpannableStringBuilder 構造文本內容,然後為文本設置 android.text.style 包中定義的樣式,常見的樣式有StrikethroughSpan、StyleSpan、ForegroundColorSpan等。例如,為某段文字內容加上帶顏色和刪除線的粗體樣式。最後,項目中用到了格式化字元串,所以只能採取第一種方式來避免樣式信息被清除。這里遇到一個非常奇葩的坑, fromHtml(String)無法正常顯示帶<strike>標簽的格式。解決辦法是結合使用spannable,這里通過其他span對象來確定樣式字元串的位置,然後採用方式進行處理。
『伍』 按照thinkphp數據分頁寫完後前端該怎麼寫
一、分頁方法
/**
* TODO 基礎分頁的相同代碼封裝,使前台的代碼更少
* @param $m 模型,引用傳遞
* @param $where 查詢條件
* @param int $pagesize 每頁查詢條數
* @return \Think\Page
*/
function getpage(&$m,$where,$pagesize=10){
$m1=clone $m;//淺復制一個模型
$count = $m->where($where)->count();//連慣操作後會對join等操作進行重置
$m=$m1;//為保持在為定的連慣操作,淺復制一個模型
$p=new Think\Page($count,$pagesize);
$p->lastSuffix=false;
$p->setConfig('header','<li class="rows">共<b>%TOTAL_ROW%</b>條記錄 每頁<b>%LIST_ROW%</b>條 第<b>%NOW_PAGE%</b>頁/共<b>%TOTAL_PAGE%</b>頁</li>');
$p->setConfig('prev','上一頁');
$p->setConfig('next','下一頁');
$p->setConfig('last','末頁');
$p->setConfig('first','首頁');
$p->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
$p->parameter=I('get.');
$m->limit($p->firstRow,$p->listRows);
return $p;
}
getpage方法可以放在TP框架的 Application/Common/Common/function.php,這個文檔可以專門放置一些通用的方法,在哪裡都可以調用(如:Controller文件,View文件等)。
二、調用分頁方法
$m=M('procts');
$p=getpage($m,$where,10);
$list=$m->field(true)->where($where)->order('id desc')->select();
$this->list=$list;
$this->page=$p->show();
再是View代碼
<div class="pagination">
{$page}
</div>
三、最後就是分頁的樣式了,這個有些亂,因後台框架網上下載的,樣式還沒來的及整理,這個樣式也可以自己實現,簡單的。
.pagination ul {
display: inline-block;
margin-bottom: 0;
margin-left: 0;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05);
box-shadow: 0 1px 2px rgba(0,0,0,0.05);
}
.pagination ul li {
display: inline;
}
.pagination ul li.rows {
line-height: 30px;
padding-left: 5px;
}
.pagination ul li.rows b{color: #f00}
.pagination ul li a, .pagination ul li span {
float: left;
padding: 4px 12px;
line-height: 20px;
text-decoration: none;
background-color: #fff;
background: url('../images/bottom_bg.png') 0px 0px;
border: 1px solid #d3dbde;
/*border-left-width: 0;*/
margin-left: 2px;
color: #08c;
}
.pagination ul li a:hover{
color: red;
background: #0088cc;
}
.pagination ul li.first-child a, .pagination ul li.first-child span {
border-left-width: 1px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
-webkit-border-top-left-radius: 3px;
border-top-left-radius: 3px;
-moz-border-radius-bottomleft: 3px;
-moz-border-radius-topleft: 3px;
}
.pagination ul .disabled span, .pagination ul .disabled a, .pagination ul .disabled a:hover {
color: #999;
cursor: default;
background-color: transparent;
}
.pagination ul .active a, .pagination ul .active span {
color: #999;
cursor: default;
}
.pagination ul li a:hover, .pagination ul .active a, .pagination ul .active span {
background-color: #f0c040;
}
.pagination ul li.last-child a, .pagination ul li.last-child span {
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
-moz-border-radius-topright: 3px;
-moz-border-radius-bottomright: 3px;
}
.pagination ul li.current a{color: #f00 ;font-weight: bold; background: #ddd}
『陸』 MybatisPlus與前端分頁工具結合實現
雖然MybatisPlus提供了PaginationInnerInterceptor插件用來分頁,並且該插件使用起來也還不錯,但是我們開發項目的時候總是希望前後端搭配幹活,實現一些好用的功能。
比如說前端表單點擊表頭排序,這個功能我們就可以結合分頁插件完成。而且我們現在很多時候會開發多端項目,在不同前端使用不同組件適配後端介面的時候,總可能遇到命名方式不一致的問題,比如A前端框架中當前頁叫currPage,B框架中叫page等情況。基於這樣的實際情況,我們需要對項目中MybatisPlus的分頁進行一定程度的封裝,讓它能滿足我們不同情況下的實際需要。
首先是分頁插件的配置
配置好分頁插件以後MybatisPlus就支持分頁了,可以使用service的page方法或者mapper的selectPage方法進行分頁。這兩個方法都需要傳入com.baomidou.mybatisplus.extension.plugins.pagination.Page對象,這個對象也就是實際用來分頁的參數對象了。我們可以在這個對象中設置分頁的頁數,每頁的數據數量,同時也可以設置排序的欄位、排序的方式。但是排序欄位是直接通過字元串連接的方式填寫在sql中的,所以是存在sql注入的風險的,所以我們需要個過濾SQL注入工具類,我參考了JeecgBoot中的工具類,稍作修改
com.baomidou.mybatisplus.extension.plugins.pagination.Page這個分頁工具只是提供了分頁的功能,但是並不能很方便的直接拿來使用,所以我封裝了一個工具類,用來通過我們寫好的配置從參數中獲取分頁需要的信息以及配合前端Table排序的參數信息,並且過濾了SQL注入
相同的,不同的Table框架中接收的數據格式也有一些差別,我們分頁方法返回的com.baomidou.mybatisplus.core.metadata.IPage也不能滿足我們的格式要求。所以根據實際情況封裝一個工具類,用來返回我們需要的數據格式
最後分頁調用的時候就變得簡單了
『柒』 前端開發怎樣把後台數據列表分頁顯示
在page類中新加入path屬性,用以存儲每次轉發的路徑及攜帶參數。
private String path;
新建WEBUtils類,獲取路徑,放在新聲明的url中,簡便頁面中的EL表達式。
public static String getPath(HttpServletRequest request){
String requestURI = request.getRequestURI();//獲取請求路徑
String queryString = request.getQueryString();//獲取請求參數
String url = requestURI+"?"+queryString;
if(url.contains("&pageNo")){
url = url.substring(0, url.indexOf("&pageNo"));
}
return url;
}
在servlet中將WEBUtils中獲取的url放入page中。
page.setPath(url)
在要顯示的頁面寫如下代碼,主要是分類進行判斷。