最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jQuery實現(xiàn)ajax無刷新分頁頁碼控件

 更新時間:2017年02月28日 17:09:15   作者:淺曦憶  
這篇文章主要介紹了jQuery實現(xiàn)ajax無刷新分頁頁碼控件,需要的朋友可以參考下

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

無刷新的分頁頁碼控件 

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

下面是該控件實現(xiàn)的js代碼:

// JavaScript Document
$(function(){
  //點擊分頁按鈕觸發(fā)
  $("#pageGro li").live("click",function(){
    var pageNum = parseInt($(this).html());//獲取當(dāng)前頁數(shù)
    //獲取當(dāng)前評價分類的總頁數(shù)
    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獲取數(shù)據(jù)的代碼,為了讓這個頁碼控件能夠更通用,我將這個方法寫在調(diào)用這個js的php頁面中,這樣使得這個頁碼控件能應(yīng)用于更多的場景中。
  });
  //點擊上一頁觸發(fā)
  $("#pageGro .pageUp").live("click",function(){
    var totalnum = type+""+praise;
    console.log(totalnum);
    console.log(pageCount);
    if(pageCount[parseInt(totalnum)] > 5){//初始默認(rèn)顯示1-5頁(若真實頁碼小于五,則根據(jù)真實頁碼數(shù)顯示)
      var pageNum = parseInt($(this).children("li.on").html());//獲取當(dāng)前頁
      pageUp(pageNum,pageCount[parseInt(totalnum)]);
      loadData(pageNum);
    }else{
      var index = $("#pageGro ul li.on").index();//獲取當(dāng)前頁
      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);
      }
    }
  });
  //點擊下一頁觸發(fā)
  $("#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());//獲取當(dāng)前頁
      pageDown(pageNum,pageCount[parseInt(totalnum)]);
      loadData(pageNum);
    }else{
      var index = $(this).children("ul li.on").index()+1;//獲取當(dāng)前頁
      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);
      }
    }
  });
});
//點擊跳轉(zhuǎn)頁面
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;
  }
}
//根據(jù)當(dāng)前選中頁生成頁面點擊按鈕
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>
     <!--頁碼顯示區(qū) -->
    </ul>
  </div>
  <div class="pageDown">下一頁</div>
</div>

頁面上寫的用于被該頁碼控件調(diào)用實現(xiàn)無刷新加載數(shù)據(jù)的ajax方法

//ajax獲取點擊分頁按鈕應(yīng)該加載的數(shù)據(jù)
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回來的數(shù)據(jù)是否為空
        var s = '';
        beChangeElement = $(beChangeElement);
        console.log(beChangeElement);
        beChangeElement.children("div.detail-content").remove();
        $.each(info, function(index,v){
          s="你ajax出來要填補到頁面上的數(shù)據(jù)";
          beChangeElement.children("#pageGro").before(s);//表示將s中的內(nèi)容填充到相應(yīng)頁碼控件前面
        });
      }else{
        var t = "<p style='text-align:center;margin:20px;font-size:18px;color:#999;'>暫時還沒有內(nèi)容哦!</p>";
        beChangeElement.html(t);
      }
    },
  });
}

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

在其中需要注意的內(nèi)容如下:

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

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

1.$("body").on('click', ".cumulative-eva a",function(){});//click:表示要委托的事件類型(這里表示要委托的事件是點擊事件),".cumulative-eva a":觸發(fā)事件的選擇器名字(這里表示觸發(fā)點擊事件的選擇器是$(.cumulative-eva a)),function里面寫觸發(fā)事件后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()的區(qū)別。

區(qū)別如下:

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

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

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

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

以上為我寫頁碼控件的全部內(nèi)容,至此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;}

頁碼控件中使用的上下頁圖標(biāo):

上一頁
下一頁

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

相關(guān)文章

  • 解析jQuery與其它js(Prototype)庫兼容共存

    解析jQuery與其它js(Prototype)庫兼容共存

    解決jQuery與其它js(Prototype)庫沖突的方法很簡單,就是使用jQuery的jQuery.noConflict()函數(shù),以下小編就為大家介紹,需要的朋友可以參考下
    2013-07-07
  • 基于Jquery的簡單圖片切換效果

    基于Jquery的簡單圖片切換效果

    Jquery實現(xiàn)簡單圖片切換效果代碼,需要的朋友可以參考下。
    2011-01-01
  • jQuery 動畫基礎(chǔ)教程

    jQuery 動畫基礎(chǔ)教程

    用jquery實現(xiàn)簡單動畫的制作,希望看了這篇文章后,建議大家自己手工打打,學(xué)習(xí)一下他的思路。
    2008-12-12
  • jquery+springboot實現(xiàn)文件上傳功能

    jquery+springboot實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了jquery+springboot文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • jQuery中contents()方法用法實例

    jQuery中contents()方法用法實例

    這篇文章主要介紹了jQuery中contents()方法用法,實例分析了contents()方法的功能、定義及查找匹配元素內(nèi)部所有的一級子節(jié)點的使用技巧,需要的朋友可以參考下
    2015-01-01
  • jQuery UI仿淘寶搜索下拉列表功能

    jQuery UI仿淘寶搜索下拉列表功能

    這篇文章主要為大家詳細介紹了Jquery UI 模仿淘寶搜索下拉列表功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • jquery validate 自定義驗證方法介紹 日期驗證

    jquery validate 自定義驗證方法介紹 日期驗證

    本篇文章主要是對jquery validate 自定義驗證方法 日期驗證進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • 使用jquery prev()方法找到同級的前一個元素

    使用jquery prev()方法找到同級的前一個元素

    .prev()方法允許我們在 DOM 樹中搜索這些元素的前一個同胞元素,并用匹配元素構(gòu)造一個新的jQuery對象
    2014-07-07
  • jQuery常用且重要方法匯總

    jQuery常用且重要方法匯總

    這篇文章主要介紹了jQuery常用且重要方法匯總的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • jQuery基本過濾選擇器用法示例

    jQuery基本過濾選擇器用法示例

    這篇文章主要介紹了jQuery基本過濾選擇器用法,結(jié)合實例形式分析了jQuery中:first、:last、:not、:even、:odd、:eq、:gt等基本過濾選擇器的使用方法,需要的朋友可以參考下
    2016-09-09

最新評論

旌德县| 成都市| 天峨县| 泉州市| 都昌县| 枣阳市| 剑川县| 哈密市| 青阳县| 延津县| 昆明市| 武山县| 玉龙| 溧阳市| 孟州市| 霍州市| 荣昌县| 唐海县| 乌拉特前旗| 定日县| 噶尔县| 林口县| 固阳县| 岳普湖县| 佛冈县| 龙口市| 大连市| 黔南| 察隅县| 泰来县| 临城县| 清镇市| 嘉祥县| 汽车| 宜宾市| 射洪县| 青阳县| 师宗县| 长丰县| 宁河县| 西宁市|