jQuery数据显示插件整合实现代码


Posted in Javascript onOctober 24, 2011
显示表格数据会涉及到一些东西,如字段显示隐藏,数据状态,分页之类。

由于我们公司的产品涉及到很多的表格数据显示,而且每张表的字段数都很多,在工作过程中(几任同仁的努力),整合出一套自认为较为轻巧的方案。如图:jQuery数据显示插件整合实现代码

其中涉及到的插件主要有:
jQuery.columnmanager.expand.js(扩展columnmanager)
jQuery.dropbox.js(自已写的)
jQuery.pager.expand.js(扩展pager) 
jQuery.cookie.js
 其中pager.expand.js,dropbox.js以及各插件间的整合在common.js里,代码如下:

//定义全局命名空间 
var GLOBAL = {}; 
GLOBAL.Namespace = function(str) { 
var arr = str.split("."), o = GLOBAL; 
for (var i = (arr[0] == 'GLOBAL') ? 1 : 0; i < arr.length; i++) { 
o[arr[i]] = o[arr[i]] || {}; 
o = o[arr[i]]; 
} 
} 
GLOBAL.Namespace("zyh"); 
/* 
****************************************************************** 
jQuery.pager 
****************************************************************** 
*/ 
(function($) { 
$.fn.pager = function(options) { 
var opts = $.extend({}, $.fn.pager.defaults, options); 
return this.each(function() { 
// empty out the destination element and then render out the pager with the supplied options 
$(this).empty().append(renderpager(parseInt(options.pagenumber), parseInt(options.pagecount), options.buttonClickCallback, options.rowcount)); 
// specify correct cursor activity 
//$('.pages li').mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }); 
}); 
}; 
// render and return the pager with the supplied options 
function renderpager(pagenumber, pagecount, buttonClickCallback, rowcount) { 
// setup $pager to hold render 
var $pager = $('<ul class="pages"></ul>'); 
// add in the previous and next buttons 
$pager.append(renderButton('|<', pagenumber, pagecount, buttonClickCallback)).append(renderButton('<<', pagenumber, pagecount, buttonClickCallback)); 
// pager currently only handles 10 viewable pages ( could be easily parameterized, maybe in next version ) so handle edge cases 
var startPoint = 1; 
var endPoint = 6; 
if (pagenumber > 3) { 
startPoint = pagenumber - 3; 
endPoint = pagenumber + 3; 
} 
if (endPoint > pagecount) { 
startPoint = pagecount - 5; 
endPoint = pagecount; 
} 
if (startPoint < 1) { 
startPoint = 1; 
} 
// loop thru visible pages and render buttons 
for (var page = startPoint; page <= endPoint; page++) { 
var currentButton = $('<li class="page-number">' + (page) + '</li>'); 
page == pagenumber ? currentButton.addClass('pgCurrent') : currentButton.click(function() { buttonClickCallback(this.firstChild.data); }); 
currentButton.appendTo($pager); 
} 
// render in the next and last buttons before returning the whole rendered control back. 
$pager.append(renderButton('>>', pagenumber, pagecount, buttonClickCallback)).append(renderButton('>|', pagenumber, pagecount, buttonClickCallback)); 
$pager.append('<li class="pgNone">共' + pagecount + "页</li>"); 
// if (rowcount != undefined) { 
// $pager.append('<li class="pgNone">共' + rowcount + "条记录,最多显示600条</li>"); 
// } 
if (rowcount != undefined) { 
$pager.append('<li class="pgText"> ' + rowcount + '条记录 </li>'); 
} 
return $pager; 
} 
// renders and returns a 'specialized' button, ie 'next', 'previous' etc. rather than a page number button 
function renderButton(buttonLabel, pagenumber, pagecount, buttonClickCallback) { 
var $Button = $('<li class="pgNext">' + buttonLabel + '</li>'); 
var destPage = 1; 
// work out destination page for required button type 
switch (buttonLabel) { 
case "|<": 
destPage = 1; 
break; 
case "<<": 
destPage = pagenumber - 1; 
break; 
case ">>": 
destPage = pagenumber + 1; 
break; 
case ">|": 
destPage = pagecount; 
break; 
} 
// disable and 'grey' out buttons if not needed. 
if (buttonLabel == "|<" || buttonLabel == "<<") { 
pagenumber <= 1 ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); }); 
} 
else { 
pagenumber >= pagecount ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); }); 
} 
return $Button; 
} 
// pager defaults. hardly worth bothering with in this case but used as placeholder for expansion in the next version 
$.fn.pager.defaults = { 
pagenumber: 1, 
pagecount: 1 
}; 
})(jQuery); 
/* 
================================================================ 
//组件功能:鼠标移上指定目标弹出下拉框 -- by flowerszhong 
//参数说明: 
//target:事件对象Id 
//box:下拉框Id 
//left:以事件对象最上的坐标左偏移量,默认为0; 
//top:以事件对象最上的坐标上偏移量,默认为事件对象的高度 
//overClass:当前状态表格行保持高亮样式 
//on:弹出框是否有箭头 
//arrow:自动调节的指向箭头 
================================================================ 
*/ 
var dropbox = function(target, box, left, top, overClass, on, hasArrow) { 
var obj, b, p; 
if (typeof target == "object") 
obj = $(target); 
else 
obj = $("#" + target); 
if (typeof box == "object") 
b = $(box); 
else 
b = $("#" + box); 
p = obj.parent(); 
if (top == "undefined") top = obj.height(); 
var defaults = { 
l: left || 0, 
t: top || 0, 
overClass: overClass || "", 
on: on || "", 
hasArrow: hasArrow || "" 
}, 
offset = obj.offset(), 
w = $(window).height(), 
selectSet = function(flag) { 
//在IE6中,防止select控件遮罩下拉框 
if ($.browser.msie && $.browser.version == "6.0") { 
if (flag) { 
$("select").css("visibility", "visible"); 
} else { 
$("select").css("visibility", "hidden"); 
} 
} 
}; 
$(window).resize(function() { 
w = $(window).height(); 
offset = obj.offset(); 
}); 
$("#arrow").click(function() { 
offset = obj.offset(); 
}); 
//绑定mouseover事件 
obj.bind("mouseover", function() { 
var diff, arrow, scrollTop; 
scrollTop = $(window).scrollTop(); 
diff = w - (offset.top - scrollTop); 
if (on && diff < 145) { 
var subTop = 145 - diff; 
b.css({ "display": "block", "left": offset.left + defaults.l + "px", "top": offset.top + defaults.t - subTop + "px" }); 
if (hasArrow) { 
arrow = b.children("div")[0]; 
var arrTop = 35 + subTop; 
$(arrow).css("top", arrTop); 
} 
} else { 
b.css({ "display": "block", "left": offset.left + defaults.l + "px", "top": offset.top + defaults.t + "px" }); 
if (hasArrow) { 
arrow = b.children("div")[0]; 
$(arrow).css("top", "35px"); 
} 
} 
b.bind("mouseover", function(event) { 
$(this).show(); 
selectSet(false); 
if (overClass) { p.addClass(overClass); } 
event.stopPropagation(); //阻止事件冒泡 
}); 
b.bind("mouseout", function(event) { 
$(this).hide(); 
selectSet(true); 
if (overClass) { p.removeClass(overClass); } 
event.stopPropagation(); //阻止事件冒泡 
}); 
if (overClass) { p.addClass(overClass); } 
selectSet(false); 
}); 
//绑定mouseout事件 
obj.bind("mouseout", function() { 
b.css("display", "none"); 
selectSet(true); 
if (overClass) { p.removeClass(overClass); } 
}); 
//debugger; 
}; 
GLOBAL.zyh.dropbox = dropbox; 
/* 
================================================================ 
//功能:Toggle Column 表格自定义列通用方法,基于jquery.columnmanager组件,GLOBAL.zyh.dropbox组件 
//参数说明: 
//targetTable:表格Id 
//columnManagerArgument:jquery.columnmanager需要参数 
//btnSetColumn: 
//targetfive: 
//left: 0 
//top: 0 
================================================================ 
*/ 
GLOBAL.zyh.toggleTableColumn = function(options) { 
var defaults = { 
targetTable: '', 
columnManagerArgument: {}, 
btnSetColumn: '', 
targetfive: '', 
left: 0, 
top: 0 
} 
var settings = $.extend({}, defaults, options); 
$('#' + settings.targetTable).columnManager(settings.columnManagerArgument); 
GLOBAL.zyh.dropbox(settings.btnSetColumn, settings.targetfive, settings.left, settings.top); 
}
Javascript 相关文章推荐
IE与FireFox中的childNodes区别
Oct 20 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
document.forms用法示例介绍
Jun 26 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
JavaScript为事件句柄绑定监听函数实例详解
Dec 15 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
Dec 05 Javascript
uni-app之APP和小程序微信授权方法
May 09 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
基于jquery跨浏览器显示的file上传控件
Oct 24 #Javascript
firefox下input type=&quot;file&quot;的size是多大
Oct 24 #Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
Oct 24 #Javascript
editable.js 基于jquery的表格的编辑插件
Oct 24 #Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 #Javascript
css值转换成数值请抛弃parseInt
Oct 24 #Javascript
更优雅的事件触发兼容
Oct 24 #Javascript
You might like
php修改NetBeans默认字体的大小
2013/07/02 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
基于jquery封装的一个js分页
2011/11/15 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
python numpy 按行归一化的实例
2019/01/21 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
python绘制规则网络图形实例
2019/12/09 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
烹调加工管理制度
2014/02/04 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
会计岗位职责范本
2015/04/02 职场文书
公司保洁员管理制度
2015/08/04 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书