亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery實現ajax無刷新分頁頁碼控件

2019-11-19 17:23:10
字體:
來源:轉載
供稿:網友

這段時間在做公司項目的時候需要用到ajax進行分頁(點擊頁碼也是無刷新的顯示上一頁或下一頁的內容,不是一般的選擇跳轉),但是在網上找了一下,大部分分頁插件都是直接刷新跳轉的,感覺和我的需求差距比較大,就自己動手寫了一個可以實現自己需要的功能的js來實現這個控件,實現的效果如下:

無刷新的分頁頁碼控件 

因為業務需要,我需要在一個頁面創建多個這樣的頁碼控件(有些是在ajax中生成的),顯然為每一個控件寫一個專屬的js是不現實的,所以,我將公共部分提取出來,然后通過傳入的選擇器不同,對不同的控件進行相應方法的調用。

下面是該控件實現的js代碼:

// JavaScript Document$(function(){  //點擊分頁按鈕觸發  $("#pageGro li").live("click",function(){    var pageNum = parseInt($(this).html());//獲取當前頁數    //獲取當前評價分類的總頁數    var totalnum = type+""+praise;    if(pageCount[parseInt(totalnum)] > 5){      pageGroup(pageNum,pageCount[parseInt(totalnum)]);    }else{      $(this).addClass("on");      $(this).siblings("li").removeClass("on");    }    loadData(pageNum);//這個方法里面就是ajax獲取數據的代碼,為了讓這個頁碼控件能夠更通用,我將這個方法寫在調用這個js的php頁面中,這樣使得這個頁碼控件能應用于更多的場景中。  });  //點擊上一頁觸發  $("#pageGro .pageUp").live("click",function(){    var totalnum = type+""+praise;    console.log(totalnum);    console.log(pageCount);    if(pageCount[parseInt(totalnum)] > 5){//初始默認顯示1-5頁(若真實頁碼小于五,則根據真實頁碼數顯示)      var pageNum = parseInt($(this).children("li.on").html());//獲取當前頁      pageUp(pageNum,pageCount[parseInt(totalnum)]);      loadData(pageNum);    }else{      var index = $("#pageGro ul li.on").index();//獲取當前頁      console.log("index = "+index);      if(index > 0){        $(this).next().find("li").removeClass("on");//清除所有選中        $(this).next().find("ul li").eq(index-1).addClass("on");//選中上一頁        loadData(index);      }    }  });  //點擊下一頁觸發  $("#pageGro .pageDown").live("click",function(){    var totalnum = type+""+praise;    console.log(totalnum);    console.log(pageCount[parseInt(totalnum)]);    if(pageCount[parseInt(totalnum)] > 5){      var pageNum = parseInt($(this).children("li.on").html());//獲取當前頁      pageDown(pageNum,pageCount[parseInt(totalnum)]);      loadData(pageNum);    }else{      var index = $(this).children("ul li.on").index()+1;//獲取當前頁      console.log(index);      if(index+1 < pageCount[parseInt(totalnum)]){        $(this).prev().find("li").removeClass("on");//清除所有選中        $(this).prev().find("ul li").eq(index+1).addClass("on");//選中下一頁        loadData(index+2);      }    }  });});//點擊跳轉頁面function pageGroup(pageNum,pageCount){  switch(pageNum){    case 1:      page_icon(1,5,0);    break;    case 2:      page_icon(1,5,1);    break;    case pageCount-1:      page_icon(pageCount-4,pageCount,3);    break;    case pageCount:      page_icon(pageCount-4,pageCount,4);    break;    default:      page_icon(pageNum-2,pageNum+2,2);    break;  }}//根據當前選中頁生成頁面點擊按鈕function page_icon(page,count,eq,element){  var $this = element;  var ul_html = "";  for(var i=page; i<=count; i++){    ul_html += "<li>"+i+"</li>";  }  $this.children("ul").html(ul_html);  console.log($this.children("ul li:eq("+eq+")"));  $this.find("ul li:eq("+eq+")").addClass("on");}//上一頁function pageUp(pageNum,pageCount){  switch(pageNum){    case 1:    break;    case 2:      page_icon(1,5,0);    break;    case pageCount-1:      page_icon(pageCount-4,pageCount,2);    break;    case pageCount:      page_icon(pageCount-4,pageCount,3);    break;    default:      page_icon(pageNum-2,pageNum+2,1);    break;  }}//下一頁function pageDown(pageNum,pageCount){  switch(pageNum){    case 1:      page_icon(1,5,1);    break;    case 2:      page_icon(1,5,2);    break;    case pageCount-1:      page_icon(pageCount-4,pageCount,4);    break;    case pageCount:    break;    default:      page_icon(pageNum-2,pageNum+2,3);    break;  }}//生成分頁按鈕function createBtn(pageCount, element){  if(pageCount>5){    page_icon(1,5,0,element);  }else{    page_icon(1,pageCount,0,element);  }}

頁面上該頁碼控件按鈕的代碼

<div id="pageGro" class="cb">  <div class="pageUp">上一頁</div>  <div class="pageList">    <ul>     <!--頁碼顯示區 -->    </ul>  </div>  <div class="pageDown">下一頁</div></div>

頁面上寫的用于被該頁碼控件調用實現無刷新加載數據的ajax方法

//ajax獲取點擊分頁按鈕應該加載的數據function loadData(pageNum){  console.log("type = "+type +", praise = " + praise);  var beChangeElement = '';  switch(type){  case 0: beChangeElement += "#togivineva ";break;  default:;  case 1: beChangeElement += "#givineva ";break;  }  switch(praise){  default:;  case 0:beChangeElement += ".praiseAll";break;  case 1:beChangeElement += ".praiseBad";break;  case 2:beChangeElement += ".praiseNormal";break;  case 3:beChangeElement += ".praiseGood";break;  }  $.ajax({    type:"Get",    url:你要請求的url地址,    data:{page:pageNum},    dataType:'json',    success:function(data){      var info = data.info;      if(info.length > 0){//判斷ajax回來的數據是否為空        var s = '';        beChangeElement = $(beChangeElement);        console.log(beChangeElement);        beChangeElement.children("div.detail-content").remove();        $.each(info, function(index,v){          s="你ajax出來要填補到頁面上的數據";          beChangeElement.children("#pageGro").before(s);//表示將s中的內容填充到相應頁碼控件前面        });      }else{        var t = "<p style='text-align:center;margin:20px;font-size:18px;color:#999;'>暫時還沒有內容哦!</p>";        beChangeElement.html(t);      }    },  });}

到此,該頁碼控件的使用就完成了。

在其中需要注意的內容如下:

1.大家都可以看到我在ajax中用beChangeElement這個變量來表示我選中的選擇器時,是把該選擇器的標簽以字符串的形式存儲在變量中,在需要調用的時候才使用$()轉換為選擇器。為什么我不能在前面就直接把選擇器賦給變量呢。因為jQuery不允許你選擇不存在的選擇器。這么說,可能就要有疑問了,什么樣的情況下我要選擇的選擇器會不存在?(第一種情況:你把選擇器的名字寫錯了,所以jquery找不到(我相信大多數人是不會犯這個錯誤的)。第二種情況:在我們使用ajax進行數據交互的時候,有很多頁面上的標簽和數據是我們通過ajax傳遞顯示在頁面上的,這些標簽數據在頁面初始化階段是不存在的,但是我們寫的js方法,非觸發事件(除點擊事件,鼠標懸浮等需要交互的時間)都會在頁面初始化的裝載階段被解釋執行,所以就會存在變量獲取到不存在的選擇器使得值為空阻斷后續對這個選擇器進行js操作),如果你在使用的時候發現js對某個選擇器的操作失效了,就可以考慮一下這樣的情況

2.ajax生成出來的頁面內容不能跟之前頁面初始化時生成的內容一樣被頁面原有的js控制。因為這涉及到一個異步和同步的問題,在頁面渲染的時候會將對應的js綁定到相應的html標簽上,等待事件觸發,但是因為ajax出來的頁面內容出現在頁面原有的js之后,所以js無法未卜先知的去綁定它。所以我們需要根據事件冒泡機制,將需要對ajax生成出來的頁面內容進行操作的js委托給該內容的父標簽進行處理(我們一般選用標簽作為這樣的父標簽,但是要注意的是,不要一次性委托太多的js在標簽上,不然使得頁面變得很龐大,頁面的處理速度會變慢),委托事件可以表示如下:

1.$("body").on('click', ".cumulative-eva a",function(){});//click:表示要委托的事件類型(這里表示要委托的事件是點擊事件),".cumulative-eva a":觸發事件的選擇器名字(這里表示觸發點擊事件的選擇器是$(.cumulative-eva a)),function里面寫觸發事件后js對該事件的處理代碼。

2.$(".cumulative-eva a").live("click",function(){});

3.在js中我寫了這么一條js語句來選中上一頁,語句如下:

$(this).next().find("ul li").eq(index-1).addClass("on");//選中上一頁

有的人就會想在這里為什么不用children(),用children()是否也可以?那么,在解釋這個問題之前我們先來看看children()和find()的區別。

區別如下:

關于遍歷:children()是對當前選中的選擇器標簽進行編號,對于該選擇器標簽的子類標簽無論多少個都當成一個整體,不對其進行區分。而find()則是對當前選中的選擇器標簽下面的子孫類標簽進行編號,通過編號可以找到相對應的某一個子孫類標簽。

從以上的描述我們很顯然知道children()并不適用于我們這樣一個應用場景,因為我們需要選中$(this)下的某一個li,這個用children()是做不到的。那么什么樣的情況下可以使用children()呢,看下面這段js:

var pageNum = parseInt($(this).children("li.on").html());//獲取當前頁

在這個應用場景下因為頁碼控件的特殊性,被加上“on”這個class的li標簽同一時間頁面上只可能有一個,所以用children()去遍歷$(this)找他的子類被加上“on”這個class的li標簽,只可能返回一個結果,而不是一個數組,所以在這樣的場景下可以使用children()標簽。

以上為我寫頁碼控件的全部內容,至此mark一下。最后放上該頁碼控件的css代碼,讓大家參考參考,至于控件所用的圖片,我直接上傳到css代碼后面,你們需要的時候保存下來使用就行。(作為一個懶人,可供下載的源碼包啥的我就不弄了,太麻煩,如果有興趣的朋友,以后有時間的時候我再弄一份出來吧~)

頁碼控件css樣式:

/* CSS Document *//*分頁*/#pageGro{ width:400px; height:25px; margin:20px auto;}#pageGro div,#pageGro div ul li{ font-size:12px; color:#999; line-height:23px; float:left; margin-left:5px;}#pageGro div ul li{ width:22px; text-align:center; border:1px solid #999; cursor:pointer;}#pageGro div ul li.on{ color:#fff; background:#3c90d9; border:1px solid #3c90d9;}#pageGro .pageUp,#pageGro .pageDown{ width:63px; border:1px solid #999; cursor:pointer;}#pageGro .pageUp{ text-indent:23px; background:url(../img/pageUp.png) 5px 7px no-repeat;}#pageGro .pageDown{ text-indent:5px; background:url(../img/pageDown.png) 46px 6px no-repeat;}

頁碼控件中使用的上下頁圖標:

上一頁
下一頁

以上所述是小編給大家介紹的jQuery實現ajax無刷新分頁頁碼控件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精彩中文乱码av| 成人性生交大片免费观看嘿嘿视频| 精品国产一区二区三区久久久| 亚洲一区久久久| 一夜七次郎国产精品亚洲| 精品久久久久久久久久久久久| 国产成人av在线| 国产精品亚洲片夜色在线| 日韩美女免费视频| 欧美性猛交xxx| 国产精品一二三在线| 国产精品第二页| 国产日韩在线亚洲字幕中文| 久久久免费在线观看| 国产美女精品视频免费观看| 国产精品精品视频| 欧美巨猛xxxx猛交黑人97人| 日韩美女av在线| 国产啪精品视频网站| 日韩精品极品毛片系列视频| 日韩精品亚洲精品| 欧美高清视频一区二区| 色噜噜狠狠狠综合曰曰曰88av| 欧美性开放视频| 欧美精品电影免费在线观看| 亚洲第一网站免费视频| 国产中文字幕亚洲| 九九九热精品免费视频观看网站| 2019亚洲男人天堂| 欧美在线观看视频| 亚洲性视频网址| 亚洲女人被黑人巨大进入al| 精品无人区乱码1区2区3区在线| 国语对白做受69| 亚洲精品www久久久久久广东| 欧美精品在线播放| 成人午夜激情网| 日韩精品中文字幕视频在线| 精品欧美一区二区三区| 午夜精品久久久久久99热软件| 亚洲色图狂野欧美| 91久久久久久久一区二区| 欧美疯狂做受xxxx高潮| 黄网动漫久久久| 国产伦精品一区二区三区精品视频| 日韩av电影在线播放| 亚洲跨种族黑人xxx| 97国产精品免费视频| 精品一区二区三区四区| 亚洲精品久久久久久下一站| …久久精品99久久香蕉国产| 51ⅴ精品国产91久久久久久| 国产精品久久久久国产a级| 国产精品第一视频| 成人有码在线视频| 国产精品久久久久久久美男| 国产+成+人+亚洲欧洲| 久热精品视频在线| 97精品一区二区视频在线观看| 精品国产一区二区三区久久狼5月| 国产91色在线| 国产成人精品999| 日本成熟性欧美| 韩国精品久久久999| 成人国内精品久久久久一区| 亚洲精品视频播放| 欧美在线一区二区视频| 中文字幕视频一区二区在线有码| 日韩精品视频三区| 亚洲视频在线视频| 亚洲自拍欧美另类| 欧美极品少妇xxxxx| www.欧美三级电影.com| 中文字幕欧美在线| 欧美性猛交xxxx| 91麻豆国产精品| 国产suv精品一区二区三区88区| 亚洲小视频在线观看| 久久夜精品va视频免费观看| 中文字幕免费国产精品| 欧美电影在线免费观看网站| 国产精品999999| 九九热最新视频//这里只有精品| 欧美精品福利视频| 久久99视频免费| 欧美激情视频在线观看| 色狠狠久久aa北条麻妃| 久久成人18免费网站| 亚洲女同性videos| 国产精品久久一区| 91精品免费久久久久久久久| 亚洲第一男人天堂| 日韩成人激情在线| 欧美色视频日本高清在线观看| 中日韩午夜理伦电影免费| 中文字幕亚洲欧美在线| 精品视频在线播放| 欧美成人剧情片在线观看| 国产精品pans私拍| 欧美肥老太性生活视频| 精品亚洲一区二区三区在线播放| 国产专区精品视频| 欧洲日韩成人av| 午夜精品福利视频| 亚洲精品视频播放| 欧美黑人极品猛少妇色xxxxx| 自拍偷拍免费精品| 国产亚洲欧美视频| 国产精品久久一区主播| 色爱av美腿丝袜综合粉嫩av| 91免费观看网站| 国产亚洲免费的视频看| 亚洲精品综合久久中文字幕| 最新国产精品亚洲| 国产精品美女呻吟| 成人免费福利在线| 欧美激情一区二区三区高清视频| 久操成人在线视频| 伊是香蕉大人久久| 日本在线精品视频| 色婷婷综合成人av| 亚洲国产精品中文| 国产精品久久久久久久久免费| 日韩欧美一区二区三区久久| 国产欧美精品一区二区三区-老狼| 亚洲欧美日韩中文在线| 国产精品久久久久99| 色综久久综合桃花网| 欧美午夜精品久久久久久浪潮| 国内免费精品永久在线视频| 夜夜嗨av一区二区三区免费区| 日韩电影中文 亚洲精品乱码| 国产精品无码专区在线观看| 亚洲视频在线观看| 亚洲精品视频播放| 97色伦亚洲国产| 国产精品爱久久久久久久| 亚洲专区在线视频| 久久精品一区中文字幕| 久久精品国产综合| 精品偷拍一区二区三区在线看| 欧美激情久久久久久| 日韩国产高清污视频在线观看| 国产精品久久激情| 国产91九色视频| 国产成人综合精品在线| www.色综合| 欧美精品电影免费在线观看| 亚洲xxx大片| 亚洲成人黄色在线观看| 国产日产欧美精品| 亚洲精品福利视频| 欧美日韩另类字幕中文| 亚洲乱码国产乱码精品精| 视频在线一区二区| 亚洲国产精品网站| 亚洲国产高潮在线观看| 国产精品久久久久久久app| 亚洲一二在线观看| 红桃视频成人在线观看| 亚洲欧洲美洲在线综合| 中文字幕日韩有码| 成人精品视频久久久久| 亚洲精品之草原avav久久|