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 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
再谈javascript 动态添加样式规则 W3C校检
Dec 25 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
javaScript实现滚动条事件详解
Mar 24 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
jQuery实现倒计时功能完整示例
Jun 01 jQuery
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
人族 Terran 基本策略
2020/03/14 星际争霸
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
财务负责人任命书
2014/06/06 职场文书
电影雷锋观后感
2015/06/10 职场文书
欠条格式范本
2015/07/03 职场文书