http://blog.csdn.net/anshao/archive/2009/08/12/4435167.aspx

用插件来做规律性很强的数据展现是个不错的选择,jquery插件家族中这类插件通常叫做table或者grid,本人用过两个有名的插件:jqgrid和flexgrid,自己也曾经在使用jquery之前尝试过自己写grid插件,这篇文章将就flexgrid插件的使用和改造展开。
非常囧的是flexgrid的homepage居然无法访问了,不过没关系,Google group上已经有了相关的讨论,且非常活跃,访问地址为:http://groups.google.com/group/flexigrid?hl=en

  • 1.flexigrid特性介绍

    来看看jquery官网有关该插件的介绍官网列举的Features:
    * 列可伸缩
    * 高度可调整
    * 可按照表头排序
    * 很酷的外观风格
    * 能够转换一个普通的表格
    * 可以连接到一个ajax方式的数据源(仅是xml格式)
    * 分页功能
    * 显示/隐藏 列
    * 提供可供外部访问的API
    * 更多更多…
    Google group 上的介绍:轻量级但功能丰富的data grid插件,支持列伸缩和排序功能,可采用ajax的方式连接到一个xml的数据源来获取所需数据,和Ext Grid非常相似,但它是纯jquery的,这使得它更加小巧,并遵循jquery插件一贯的少量配置特性

  • 2.怎样获取flexigrid?

    既然官网已经无法访问,那就去其他途经吧,在上面提到的jquery站点和Google group站点都可以找到下载链接,如果仍然无法搞定,那么pm我吧:)
    3.我想观看一下Demo先
    嗯,不错的习惯,毕竟同类插件已经挺多的了,也不乏jqgrid这样的强悍者,还是货比三家先吧。Google group上提供的各个后台语言版本的Demo:
    php 版本的 by Kevin Kietel: http://sanderkorvemaker.nl/test/flexigrid/
    CodeIgniter 版本的 by Armorfist: http://flexigrid.eyeviewdesign.com/
    ASP 版本的 by Synergiq: http://jamesowers.co.uk/asp-tutorials/57/flexigrid-with-asp/
    Ruby on Rails 版本的 by Nick Fessel: http://www.nickfessel.com/index.php?post=17

  • 4.使用步骤:

    a.下载jquery.js(最新1.2.6版本)和flexigrid.js(jquery官网上提供的较旧,而官网又无法访问,我自己用的是$Date: 2008-07-14 00:09:43 +0800 (Tue, 14 Jul 2008) $版本的),并在需要使用的页面顺序引入,(还需要引入相关的样式文件和图片文件)。
    b.安装过程。首先在需要使用的DOM标签中加入代码:

    1. <table id="yourgrid_id"></table>

    在onload事件或者jquery的$(function(){…})方法中加入下列初始化代码:

    1. $("#top_ten").flexigrid({
    2. url: "getData.php",
    3. dataType: 'xml',
    4. colModel : [{display: '编号', name : 'id', width : 65, sortable : true, align: 'center'},
    5. {display: '内容提要', name : 'summary', width : 180, sortable : true, align: 'left'},
    6. {display: '内容类别', name : 'contentType', width : 60, sortable : true, align: 'left'},
    7. {display: '字段名', name : 'arriveRate', width : 90, sortable : true, align: 'left'},
    8. {display: '字段名', name : 'hitRate', width : 90, sortable : true, align: 'left'},
    9. {display: '字段名', name : 'fitRate', width : 90, sortable : true, align: 'left'}],
    10. sortname: "pushCount",sortorder: "desc",usepager: false,title: '表头名称',
    11. useRp: false,rp: 10,showTableToggleBtn: true,width: 650,height: 270
    12. });
  • 5.上面这样做之后,前端就部署完毕了,但参数极其取值需要说明一下,完整的参数及说明如下(当前值为默认值):

    height: 200, //flexigrid插件的高度,单位为px
    width: ‘auto’, //宽度值,auto表示根据每列的宽度自动计算
    striped: true, //是否显示斑纹效果,默认是奇偶交互的形式
    novstripe: false,
    minwidth: 30, //列的最小宽度
    minheight: 80, //列的最小高度
    resizable: true, //是否可伸缩
    url: false, //ajax方式对应的url地址
    method: ‘POST’, // 数据发送方式
    dataType: ‘xml’, // 数据加载的类型
    errormsg: ‘Connection Error’,//错误提升信息
    usepager: false, //是否分页
    nowrap: true, //是否不换行
    page: 1, //默认当前页
    total: 1, //总页面数
    useRp: true, //是否可以动态设置每页显示的结果数
    rp: 15, // 每页默认的结果数
    rpOptions: [10,15,20,25,40],//可选择设定的每页结果数
    title: false,//是否包含标题
    pagestat: ‘Displaying {from} to {to} of {total} items’,//显示当前页和总页面的样式
    procmsg: ‘Processing, please wait …’,//正在处理的提示信息
    query: ”,//搜索查询的条件
    qtype: ”,//搜索查询的类别
    nomsg: ‘No items’,//无结果的提示信息
    minColToggle: 1, //minimum allowed column to be hidden
    showToggleBtn: true, //show or hide column toggle popup
    hideOnSubmit: true,//隐藏提交
    autoload: true,//自动加载
    blockOpacity: 0.5,//透明度设置
    onToggleCol: false,//当在行之间转换时
    onChangeSort: false,//当改变排序时
    onSuccess: false,//成功后执行
    onSubmit: false // 调用自定义的计算函数

6.处理数据的后台脚本
flexigrid需要数据支持,其数据是通过ajax方式传送到客户端来进行处理的,格式为xml,在作者给定的demo中包含了一个php格式的处理脚本post.php,其中包含了数据库的操作,在此需要进行相应的修改。
另外,需要注意,提供的数据个数和格式需要和4中指定的列数对应上。当然,这里的数据是会被解析成html内容,也就是说,你可以向客户端传送光秃秃的数据,也可以稍微“包装”一下,比如:数据或者:
甚至是图片什么的,总之可以自定义,加点JavaScript事件也无妨,反正jquery特别适合做这样的处理。这就为后续处理埋下了伏笔,这些内容将在后面讲到,要不然对不起标题中的“玩转”二字。

到这里,基本的用法算是完成了,一些个性化的设置和处理可以在读懂代码和配置项之后施行,也可以看看源码,结构挺不错的,注意几个扩展事件如reload,还有,计算的入口方法populate,可以进行相应的修改,简化很多繁琐的时间,不过要谨慎。

之前写到:玩转jquery插件之flexigrid(一)如何获取并使用flexigrid?挺受欢迎,后来倒是一直有在从事flexigrid的应用,但的确有些忙,一些整理和保密(一些应用中涉及机密的内容要去掉)工作也感觉会挺繁琐,只好慢慢来吧。
谈到改造,先说一下我们一般都会有哪些比较典型的应用吧,比如在数据上的点击增加点事件,比如加一个筛选记录的操作入口,比如编辑某条记录等等,这些至少是我工作中实实在在的需求。那么在这里,限于篇幅和个人精力,我们做三个方面的改造。
a).增加按钮事件
b).显示某个时间区间内的数据,且可以选择时间区间
c).根据输入的条件筛选数据

对于需求a,我们对按钮事件的期望当然是去完成某项操作,在这里讨论的是和服务端有交互的事件,在flexigrid的一些高级例子中,给出了“增加”和“删除”按钮,但未给出交互示例,其实作者意图也是告诉我们该增加怎样的按钮,按钮放在哪里,按钮该干什么事情等等,都是可以让我们自定义的。如对于“增加”和“删除”按钮事件,我们可以这里来处理:
首先在flexigrid的定义中增加这样的设置,

  1. buttons : [
  2. {name: '添加版本', bclass: 'add', onpress : versionMan},
  3. {name: '删除版本', bclass: 'delete', onpress : versionMan},
  4. {separator: true}
  5. ],

表示要给flexigrid增加两个按钮,名为“增加”和“删除”,分别用“add”和“delete”的class来修饰,且都调用了一个名为versionMan的函数,并且按钮直接启用了分隔符。
至于versionMan函数,完全可以自定义要做的事情。如在示例中我这样进行了定义(主要是看看结构,可以根据自己的需求进行更改):

  1. function versionMan(com,grid){
  2. if(com == "添加版本"){
  3. type = "insert";
  4. //mask(); 给弹出的div加入遮罩效果
  5. //_initVal();初始化弹出div的函数调用,这里均可自定义
  6. $("#edit_versionDiv").css("top",(document.documentElement.scrollTop+260)+"px").show();
  7. }
  8. else if(com == "删除版本"){
  9. if($('.trSelected',grid).length==0){
  10. alert("请先选中要删除的版本");return false;
  11. }
  12. if(confirm('删除 ' + $('.trSelected',grid).length + ' 版本?')){
  13. var versionArr=$(".trSelected td:eq(2) div:first-child",grid);
  14. var versionStr = new Array();
  15. for(var i=0; i<versionArr.length;i++){
  16. versionStr.push($(versionArr[i]).text());
  17. }
  18. $.ajax({
  19. type: "POST",
  20. url:  "del_version.php",
  21. data: "ids="+versionStr.join(","),
  22. success: function(msg){
  23. if(msg=="success"){
  24. $("#version_man").flexReload({});
  25. }
  26. else alert("有错误发生");
  27. },
  28. error: function(msg){
  29. alert(msg);
  30. }
  31. });
  32. }
  33. }
  34. };

上面的示例中需要注意的是:使用ajax方法调用一个php脚本并传入参数,从而执行了需要的操作,php脚本的写法并没有什么不同,就像普通的处理即可,然后$(”#version_man”).flexReload({});这里表示重新调用了flexigrid控件。
除了上面这种通过定义的接口增加按钮和事件的方式,我们还可以采用完全自定义的方式来达到同样的效果,如可以这样来进行:

  1. function set_exeBtn(id){
  2. if($("#"+id).parent().siblings(".pDiv").children(".pDiv2").children("div:last").contents("input").length == 0){
  3. var str = '<div class="btnseparator"></div><div class="pGroup" style="float:right"><input type="button" οnclick="updateS
  4. tate(\''+id+'\')" class="button" value="执行" /></div>';
  5. $("#"+id).parent().siblings(".pDiv").children(".pDiv2").append(str);
  6. }
  7. };

然后在flexigrid初始化参数中设置:onSuccess:function(){set_exeBtn(”gridtable”);},这表示flexigrid加载完成后执行set_exeBtn函数,该函数向flexigrid的右下角加入了一个名为“执行”的按钮,并且为该按钮定义了事件updateState,该事件的定义如下:

  1. function updateState(id){
  2. //最后
  3. $("#"+id+" tr td:last-child div:first-child").each(function(){
  4. var op = $(this).text();
  5. if(op == "无操作")return;
  6. else{
  7. var ids = $(this).parents("tr:first").children("td:first").children("div:first").text();//假定第一行的值为记录的id
  8. var newStateVal = $("span:first",this).attr('lang');
  9. $.ajax({
  10. url:"update_msgState.php",
  11. type:"POST",
  12. dataType:"text/html",
  13. data:"ids="+ids+"&ps="+newStateVal,
  14. success:function(data){
  15. if(data == "success"){
  16. //reloadGrids(id); 自定义执行成功后的函数调用,可以重新调用flexigrid或者做其他操作
  17. }
  18. else{
  19. alert("执行过程遇到错误");
  20. }
  21. },
  22. error:function(msg){
  23. alert(msg);
  24. }
  25. });
  26. }
  27. });
  28. };

该事件的简要说明:该事件检查flexigrid的最后一列的值,如果不等于无操作,将以ajax的方式执行update_msgState.php程序,该程序主要用于更新flexigrid中的记录项的状态字段值,和一般程序也没什么两样,执行成功会输出success,在这里必须提及我对flexigrid.js文件的两处改动:

  1. //大概1421行
  2. $.fn.flexReload = function(p) { // function to reload grid
  3. return this.each( function() {
  4. if (this.grid&&this.p.url){
  5. //roby added 2 lines  针对url参数和onSuccess被自定义后却并没有起作用,自行设置的,其他项如果也是如此,可以采用此种方法
  6. if(p.url!=undefined) this.p.url=p.url;
  7. if(p.onSuccess!=undefined) this.p.onSuccess=p.onSuccess;
  8. if(p.sortname!=undefined){this.p.sortname=p.sortname;this.p.sortorder=p.sortorder;} this.grid.populate();}
  9. });
  10. }; //end flexReload
  11. //大概389行
  12. if (p.total==0)
  13. {
  14. $('tr, a, td, div',t).unbind();
  15. $(t).empty();
  16. p.pages = 1;
  17. p.page = 1;
  18. this.buildpager();
  19. $('.pPageStat',this.pDiv).html(p.nomsg);
  20. //roby added 1 line 这里主要是为了使onSuccess在即便flexigrid初始化调用获得的数据为空时仍然会执行(默认不执行,至于应不应该这么做,还是看具体需求吧,我在后面的例子中会用到)
  21. if (p.onSuccess) p.onSuccess();
  22. return false;
  23. }

写到这里,发现篇幅已经很长,而且在方式上我想最好是给出一些在线的demo,这个工作我往后有时间了再整理吧,其他的将在后续文章中完成。

转载于:https://www.cnblogs.com/ifishing/archive/2010/07/12/1775704.html

玩转jquery插件之flexigrid 【转】相关推荐

  1. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...

  2. 15款提高表格操作的jQuery插件

    table表格由于它的浏览器兼容性和复杂的标签嵌套方式,可以算是添加样式最困难的对象之一了.大多数前端er都把网页中的table标签替 换为div,主要就是因为div要比table更容易添加CSS样式 ...

  3. 1000个JQuery插件(转载)

    超强1000个jquery极品插件!(转) 花N长时间积累的Jquery插件,希望大家喜欢.大家还有什么新的插件,请留言,我们一并收录. 感谢大家的支持. ++++++++++++++++++++++ ...

  4. 1000个jquery插件

    1.导航类 (1)Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件.二手图书 二手书 特价书 旧书网 (2)jQuery-Horizontal ...

  5. 气球或者泡泡向上飘动 jQuery插件

    圣诞.元旦要来了,公司以往基本每个月至少要搞一两款手机小游戏来宣传产品,这次也不例外!! 之前做过,按压柚子.许愿.吃柚子等等小游戏,这次是做个那种 气球向上飘动,戳破气球,随机获取奖品.如下图: 手 ...

  6. jQuery插件thickbox在ie下垂直居中问题

    jQuery 插件 thickbox 3.1 在ie下总不能垂直居中,按"http://jamazon.co.uk/web/2008/03/17/thickbox-31-ie7-positi ...

  7. 自己开发开源jquery插件--给jquery.treeview加上checkbox

    很多时候需要把树状的数据显示除来,比如分类,中国省份.城市信息,等,因此这方面的javascript插件也有很多.比如性能优异的jquery.treeview和国人开发的功能强大的zTree. 我最近 ...

  8. 推荐两款简单好用的图片放大jquery插件

    一.zoomfiy.js 推荐可以从这里下载 使用说明: 使用该jquery 插件 引入该插件的js:zoomfiy.js 或 min 引入该插件的css:zoomfiy.css 或 min 前后顺序 ...

  9. 动感效果的TAB选项卡 jquery 插件

    动感效果的TAB选项卡 jquery 插件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

最新文章

  1. Vue前端-Flask后台跨域访问问题的处理
  2. Hacker News 12 月招聘趋势:React 已霸榜 19 个月
  3. 找出最长0,1对数相同的子串
  4. LintCode 402: Continuous Subarray Sum
  5. python多线程并发写入_Python多线程并发的简单测试
  6. 还在用 Redux,要不要试试 GraphQL 和 Apollo?
  7. web 基本概念辨异 —— URI 与 URL
  8. Android之GPU过度绘制与图形渲染优化
  9. 高通QCC蓝牙耳机提示音生成方法
  10. 谱曲软件-MuseScore
  11. 3. 二叉哥的二叉树
  12. 计算机二级word海报体,2016年计算机二级《MSOffice》全真模拟试题
  13. 微信安全专线如何转人工服务器,微信客服电话怎么转人工?怎么解封微信号?...
  14. Print a rhombus (C++)
  15. 怎么获取api key?
  16. c++笔记③1109
  17. 行人重识别模型搭建与训练
  18. 论文阅读:Cyber-security research
  19. 生成酷炫代码注释(根据图片生成)
  20. java web孤傲苍狼,JavaWeb学习笔记

热门文章

  1. 帮助 Medium 阅读时间达到 2600 年的技术栈
  2. proxychains 一个好用的终端用代理拦截器
  3. gradle学习(19)-log系统
  4. 基于8086CPU微处理器的汇编学习之内存空间的编辑
  5. mysql 同步 master-slave
  6. HDMI、DVI和VGA接口互相转换问题
  7. Windows Phone 7三触控程序开发
  8. 我是新来的,希望大家以后能多指教.
  9. linux 变量引用 和 变量的自动类型转换 c++,c++类型转换 - memristor的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 帝国cms php调用字段,帝国cms模板教程之栏目自定义字段调用教程及代码