前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了。可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用)。刚开始学习编程时就接触到博客园,且在博客园学习了很多的知识,看过很多人的分享。说来也惭愧,自己没能为园友们分享自己的所学所得(毕竟水平比较差)。
过去的一年也是辗转了几个城市换了几份工作(注定本命年不太平?)。八月份来到现在所在的公司(OTA行业),公司是做互联网的,所以可能大家的前端都屌屌的?之前一直从事.NET开发(现在在这边也是),js也用的很少。于是趁着这个机会跟着大家学学js。本文要说到的插件就是在学习的过程中自己开发的。
如果你还对jQuery插件开发没有任何了解,推荐一篇文章 (博客园的前端大神很多啊,前段时间在园子看到很多优秀的js文章)
如果有javascript基础,用过jquery,看了上面的文章,我相信妈妈再也不用担心你不会jQuery插件开发了。
既然说到基于jQuery的ajax分页插件,那我们就先看看主要的代码结构:(我觉得对咱们程序员来说再优美的文字描述、介绍也比不上代码来得实在。)
1、首先定义一个pager对象:
1 var sjPager = window.sjPager = { 2 opts: { pageSize: 10, 5 preText: "pre", 6 nextText: "next", 7 firstText: "First", 8 lastText: "Last", 9 shiftingLeft: 3, 10 shiftingRight: 3, 11 preLeast: 2, 12 nextLeast: 2, 13 showFirst: true, 14 showLast: true, 15 url: "", 16 type: "POST", 17 dataType: "JSON", 18 searchParam: {}, 19 beforeSend: null, 20 success: null, 21 complete: null, 22 error: function () { 23 alert("抱歉,请求出错,请重新请求!"); 24 }, 25 }, commonHtmlText: { }, 30 init: function (obj, op) { }, 33 doPage: function (index, pageSize, searchParam) { }, 36 getTotalPage: function () { }, 39 createPreAndFirstBtn: function (pageTextArr) { }, 42 createNextAndLastBtn: function (pageTextArr) { }, 45 createIndexBtn: function (pageTextArr) { }, 48 renderHtml: function (pageTextArr) { }, 51 createSpan: function (text, className) { }, 54 createIndexText: function (index, text) { }, 57 jumpToPage: function () { } 60 }
对象包含了分页的属性及用到的方法,doPage()为分页的核心方法。
2、进行jQuery扩展
1 $.fn.sjAjaxPager = function (option) { 2 return sjPager.init($(this), option); 3 };
3、插件使用
1 $(function() { 2 $('#pager').sjAjaxPager({ 3 url: "Handler1.ashx", 4 pageSize: 10, 5 searchParam: { * 如果有其他的查询条件,直接在这里传入即可 id: 1, 10 name:'test', 11 }, 12 beforeSend: function () { 13 }, 14 success: function (data) { *返回的数据根据自己需要处理 tableStr = "<tr><td>Id</td><td>姓名</td><td>年龄</td></tr>"; 19 $.each(data.items, function(i,v) { 20 tableStr += "<tr><td>" + v.Id + "</td><td>" + v.Name + "</td><td>" + v.Age + "</td></tr>"; 21 }); 22 23 $('#dataTable').html(tableStr); 24 }, 25 complete: function () { 26 } 27 }); })
有没有发现使用方式与直接使用ajax基本是一样一样的?
最后我们可以看下出来的效果:(表格样式没有设置比较丑,分页样式自己也可以根据需要修改css文件)
F12打开调试工具,点击分页查看发送的请求及响应: