jQuery教程 $()包装函数来实现数组元素分页效果


Posted in Javascript onAugust 13, 2013

最近一周在做中文站搜索礼品widget的需求,这个需求中有一个分页的功能;具体demo可以参见下图:

jQuery教程 $()包装函数来实现数组元素分页效果

对应的js应用文件是同一个,页面中后面的offer数据已经埋好了,只是启用了css display:none样式把后面的offer元素隐藏了。现在要求对已存在的页面元素实现上下分页效果,也就是页面元素总集可以通过$(.class)获得,然后来实现分页功能。

按照传统的一般做法,用jQuery可写成如下:

var total=$(.class).length; //取得需要分页的元素的总个数
var radio=3;//根据宽窄屏获得每页显示offer条数:
var pageSize=parseInt(total/radio); //获得总页数;
if(total % radio !=0){
   pageSize+=1;  
}
var currentPage=1;  //当前页为第一页
//向前翻页的代码:
$(.leftArrow,parentElem).bind('click',function(e){
var index=currentPage-1;
   if(currentPage==1){
     return;
   }else{
      $(.class).css('display','none');
      var elemIndex=index*radio; //数组中起始要显示的元素的指针
       $(.class).eq(elemIndex).css('display','');
        $(.class).eq(elemIndex+1).css('display','');
        $(.class).eq(elemIndex+2).css('display','');
        //上面三句代码可用next()重写成   
        //$(.class).eq(elemIndex).css('display','')
        //  .next().css('display','')
        //  .next()..css('display','');     
    currentPage=index;
   }
})
//向后翻页的代码:
$(.rightArrow,parentElem).bind('click',function(e){
var index=currentPage+1;
   if(currentPage==pageSize){
     return;
   }else{
      $(.class).css('display','none');
      var elemIndex=index*radio; //数组中起始要显示的元素的指针      
        $(.class).eq(elemIndex).css('display','');
        $(.class).eq(elemIndex+1).css('display','');
        $(.class).eq(elemIndex+2).css('display','');
       //上面三句代码可用next()重写成   
        //$(.class).eq(elemIndex).css('display','')
        //  .next().css('display','')
        //  .next()..css('display','');  
    currentPage=index;
   }
})

大家发现没有,在向后翻页的代码中,无论最后一页只有1条offer,2条offer,还是全部3条offer,我都用同样的代码,不做任何判断

$(.class).eq(elemIndex).css('display',");
$(.class).eq(elemIndex+1).css('display',");
$(.class).eq(elemIndex+2).css('display',");

这3条语句连续调用。

也就是说,elemIndex有可能越界,即elemIndex>$(.class).length,即使在这样的情况下,$(.class).eq(elemIndex+1).css('display',")照样没有问题,浏览器不会报错,js照常执行,最终结果照样能完美展示。这要感谢jQuery的包装函数产生的juery对象,如果elemIndex>=$(.class).length,$(.class).eq(elemIndex+1)返回的是一个空jquery元素对象,虽然它没有对应到DOM中的元素,但它还是一个jQuery对象,因此调用.css()方法不会出错,虽然页面没有任何变化效果;

通过这个例子,就能够理解为什么jQuey对不匹配的元素仍然返回jQuery Object,而不是null,这种思想对数组分页操作来说,提供了极大的便利性,因为避免了数组索引越界引起程序错误,导致js中断执行的情况,简化了分页代码中大量的数组索引越界判断。

Javascript 相关文章推荐
jquery数据验证插件(自制,简单,练手)实例代码
Oct 24 Javascript
在Google 地图上实现做的标记相连接
Jan 05 Javascript
angularJS提交表单(form)
Feb 09 Javascript
JavaScript设计模式经典之工厂模式
Feb 24 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 Javascript
BootStrap3中模态对话框的使用
Jan 06 Javascript
如何快速上手Vuex
Feb 14 Javascript
VUE开发一个图片轮播的组件示例代码
Mar 06 Javascript
利用JS hash制作单页Web应用的方法详解
Oct 10 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 Javascript
JavaScript实现登录窗体
Jun 22 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 #Javascript
js setTimeout 参数传递使用介绍
Aug 13 #Javascript
js setTimeout 常见问题小结
Aug 13 #Javascript
删除select中所有option选项jquery代码
Aug 12 #Javascript
js获取本机的外网/广域网ip地址完整源码
Aug 12 #Javascript
JavaScript解析URL参数示例代码
Aug 12 #Javascript
JS实现Enter键跳转及控件获得焦点
Aug 12 #Javascript
You might like
php生成EXCEL的东东
2006/10/09 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
Python中functools模块的常用函数解析
2016/06/30 Python
简单了解什么是神经网络
2017/12/23 Python
对python函数签名的方法详解
2019/01/22 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
Python调用飞书发送消息的示例
2020/11/10 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
《骑牛比赛》教后反思
2014/04/22 职场文书
初中新生军训方案
2014/05/13 职场文书
2014年校长工作总结
2014/12/11 职场文书
学期个人自我总结
2015/02/13 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
httpclient调用远程接口的方法
2022/08/14 Java/Android