想必很多人都用过 jQuery Pagination 插件吧,ajax 的分页,ajax 倒不是最紧要的,偶觉得最好的是分页控制的生成。
不用再获取分页的数据后,再来计算下分页,还有显示方式,真是很麻烦。而这个东东就很好的解决了,灵活的展示控制,
一个字,爽。可别过早高潮,也有些烦恼,如初始化时,不能做很好的控制,如页数获得,ajax请求参数控制,ajax的后退
等,都不好动态控制。想想分页时未获得数据就要获得页数,不舒服啊。但这也有个好处,不用刷新页面。
因此想做点改进,但也有必要的牺牲,不能只享受啊,如要动态的刷新页面。其实此插件生成的分页控制的UI是<a>标签,
然后有个href属性,默认值是“#”当前页,其实也可以利用这个改变url分页了,最紧要的是pageIndex的获取,这个怎么访问插件代码
里的数据呢,又没API,看来惨了。不用失望,有神丹妙药的,请看:
例子
1 MBlog.plazaPageList = function(pageIndex, sorting, pageSize) {
2 var p = $("#divPeopleList");
3 $.ajax({
4 type: 'GET', url: 'Share/PeopleList.ucr', data: { sort: sorting, page: pageIndex + 1 }, dataType: 'html',
5 beforeSend: function() { loading();},
6 success: function(res) {
7 p.html(res);
8 //要先加载才能 执行下面操作
9 var h = $("#plazaPagination");
10 var s = h.attr("count");
11
12 function pageselectCallback(pageIndex, jq) {
13 //Nothing to do
14 }
15 h.pagination(s, {
16 num_edge_entries: 2,
17 num_display_entries: 6,
18 items_per_page: pageSize,
19 callback: pageselectCallback,
20 current_page: pageIndex,
21 prev_text: '上一页',
22 next_text: '下一页',
23 ellipse_text: '...',
24 link_to: 'plaza.aspx?sort=' + sorting + '&page=__id__', //__id__ 会被替换成 pagination.js 里的 page_id
25 prev_show_always: false,
26 next_show_always: false
27 });
28 },
29 error: function(e) { return false; }
30 });
31 }
注:其中的 pageSelectedCallBack 函数 一定要(享受就行),要不然<a> 标签 click 事件为 javascript:void(0); 的,没法用了,失效了。
这个主要的是要弄清楚DOM的加载顺序,只要你要用的的HTML元素已先你加载到内存就行了。
先获得第一页(默认)数据,展示数据,然后加载 pagination 必备装备(<div class="pagination" id="plazaPagination" count="{pageCount}" ></div> 当然要了。其中 pageCount,当然在你获得分页数据的时候就有了。这里分享个分页数据及一些熟悉的封装,真的很好用,点击这里。),接着获得pageCount,初始化分页控制。
这个就是数据和分页控制都是ajax动态生成的,保证最新,后退事件支持也好。就是喜欢这个分页UI的生成。
给下实例:
plaza.aspx
1 <head>
2 <script type="text/javascript">
3 $(document).ready(function() { MBlog.initPlazaPagination({PageIndex},{params},{pageSize}});
4 </script>
5 </head>
6 <body>
7 <div id="divPlaza" class="plaza">
8 <div class="navigation">
9 <ul>
10 <li></li>
11 </ul>
12 </div>
13 <div id="divPeopleList" class="peopleList">
14 </div>
15 </div>
16 </body>
注:其中PeopleList.ucr 就是 PeopleList.ascx,关于怎么访问者获得HTML,以及怎么复用,偶是参照老赵的文章(直接通过User Control生成HTML),这里多谢!
PeopleList.ascx
1 <div>
2 data ……
3 </div>
4
5 <div class="pagination" id="plazaPagination" count="{pageCount}" >
6 </div>
7
椰 完工 吃饭去鸟~~