`

JQuery表格插件介绍:Flexigrid和DataTables

阅读更多

 

JQuery的表格插件有很多。FlexigridDataTables是我最近使用的,并且功能比较强大,在这里介绍一下。如果你在寻找前端绘制表格的插件,可以考虑它们。

Flexigrid

官方Flexigrid的特性展示:

  • 列宽度可拖拽调整
  • 高度和宽度可拖拽调整
  • 列头可排序
  • 主题支持
  • 支持XML/JSON格式的Ajax数据源
  • 支持分页
  • 可以显示/隐藏列
  • 表格搜索功能
  • JavaScript API支持

要得到这样功能丰富、美观的表格:

JQuery表格插件介绍:Flexigrid和DataTables

只需要这样的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$("#flex1").flexigrid({
    url: 'post2.php',
    dataType: 'json',
    colModel : [
        {display: 'ISO', name : 'iso', width : 40, sortable : true, align: 'center'},
        {display: 'Name', name : 'name', width : 180, sortable : true, align: 'left'},
        {display: 'Printable Name', name : 'printable_name', width : 120, sortable : true, align: 'left'},
        {display: 'ISO3', name : 'iso3', width : 130, sortable : true, align: 'left', hide: true},
        {display: 'Number Code', name : 'numcode', width : 80, sortable : true, align: 'right'}
        ],
    buttons : [
        {name: 'Add', bclass: 'add', onpress : test},
        {name: 'Delete', bclass: 'delete', onpress : test},
        {separator: true}
        ],
    searchitems : [
        {display: 'ISO', name : 'iso'},
        {display: 'Name', name : 'name', isdefault: true}
        ],
    sortname: "iso",
    sortorder: "asc",
    usepager: true,
    title: 'Countries',
    useRp: true,
    rp: 15,
    showTableToggleBtn: true,
    width: 700,
    height: 200
});

注意其中的colModel属性,它明确了列定义,每一列的展示方式。比较遗憾的地方在于,它只提供了这种基于row的行表(即表头在第一行),而不支持基于column的列表(即表头在第一列)的列定义和数据集合表示。于是我写了一大段逻辑将后者的形式转换成它支持的表示形式。

对于Flexigrid所支持的JSON格式的数据表示,还是略显繁琐,如例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
    "page":"1",
    "total":239,
    "rows":[
        {
            "id":"AD",
            "cell":{
                "name":"Andorra ",
                "iso":"AD",
                "printable_name":"Andorra 3",
                "iso3":"AND 1",
                "numcode":"20"
            }
        },
        {
            "id":"AE",
            "cell":{
                "name":"United Arab Emirates ",
                "iso":"AE",
                "printable_name":"United Arab Emirates 3",
                "iso3":"ARE 1",
                "numcode":"784"
            }
        }
    ]
}

繁琐的主要原因在于这种数据格式设计得层次太深。另外,本身也包含了太多的东西,不仅仅是数据内容,还有很多控制分页、展示等等的可选字段。

如果要表格使用纯JavaScript的JSON数据,绘制表格本身的原始方法“flexigrid”无法支持,需要额外地在页面加载完成后调用API来实现,这也是插件设计上一个不够好的地方:

1
2
3
4
$(document).ready(function(){
    grid.addData(totalNumber, dataRows);
 
});

最后我想说的是,在数据量比较大时,我发现这个插件的性能不够好,在拖动表格的scroll bar的时候明显感到卡顿。

DataTables

DataTables相较而言,功能上要多得多了,官方的特性展示:

  • 可定制分页
  • 即时数据过滤
  • 多列排序
  • 列宽自动调整
  • 支持各种数据源
  • 国际化支持
  • 插件支持
  • 表格当前状态保持
  • ……

而且文档也丰富得多,不过让我不舒服的是,API定义得非常含糊不清(而且方法名和参数的key都带有一个看起来很别扭的1-2个字符的前缀,用于表示类型),虽然有详尽的API文档,但是显然不如代码自注释来得好。

我比较喜欢它的一个插件——FixColumns,使用这个插件就可以做出x轴可滚动,但锁定列表头的效果:

JQuery表格插件介绍:Flexigrid和DataTables

代码也很简单:

1
2
3
4
5
6
7
8
9
10
$(document).ready( function () {
    var oTable = $('#example').dataTable( {
        "sScrollY": "300px",
        "sScrollX": "100%",
        "sScrollXInner": "150%",
        "bScrollCollapse": true,
        "bPaginate": false
    } );
    new FixedColumns( oTable ); // from plugin
} );

可以看得到上面提到了的“很别扭”的前缀,oTable的o表示object,sScrollX的s表示string,bPaginate的b表示boolean。

和Flexigrid相比,列定义的格式类似,但是基于行的数据集合设计的格式要显得简单一些,比如支持这样的简单对象数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
      {
        "engine":   "Trident",
        "browser""Internet Explorer 4.0",
        "platform": "Win 95+",
        "version":  4,
        "grade":    "X"
      },
      {
        "engine":   "Trident",
        "browser""Internet Explorer 5.0",
        "platform": "Win 95+",
        "version":  5,
        "grade":    "C"
      }
]

这样的数组元素是有序的,每一个对象标识为一行,每一行内的key-value组合去匹配不同的列(engine、browser、platform、version、grade)。而且,它还支持数组嵌套的表示方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
      [
        "Trident",
        "Internet Explorer 4.0",
        "Win 95+",
        4,
        "X"
      ],
      [
        "Trident",
        "Internet Explorer 5.0",
        "Win 95+",
        5,
        "C"
      ]
]

信息量并没有任何减少,和列的对应关系通过数组的序列隐含了。当然,基于列的数据表示也没有得到支持(至少我没有找到)。

文章系本人原创,转载请注明作者和出处(http://www.raychase.net

注:本博客已经迁移到个人站点 http://www.raychase.net/ ,欢迎大家访问收藏,本ITEye博客在数日后将不再更新。

3
7
分享到:
评论
2 楼 vagrant1984 2012-12-27  
flexgrid用过一个项目,痛苦
1 楼 vagrant1984 2012-12-27  
jqgrid

相关推荐

    jquery 表格插件 Flexigrid

    Flexigrid是一款基于jQuery的开源表格插件,它为网页开发者提供了一种高效、灵活的方式来展示数据,并且具有丰富的功能和自定义选项。这个插件的设计目标是使数据的显示和操作变得更加简单,同时保持良好的性能和...

    强大的jQuery表格插件

    - **DataTables**:DataTables是最受欢迎的jQuery表格插件之一,支持排序、过滤、分页、列选择等多种功能,并且有多种语言和主题可供选择。 - **Handsontable**:Handsontable是一个强大的交互式表格,适合数据编辑...

    37款开源jQuery表格插件

    在当今的Web开发领域,表格是...以上就是对这些开源jQuery表格插件的介绍和分析。在实际开发中,它们可以大大增强Web应用的用户体验,使数据展示更加直观和动态。开发者可以根据项目需求选择合适的插件,实现所需功能。

    jquery 2个表格插件

    flexigrid是另一个流行的jQuery表格插件,它提供了类似的功能,但有着独特的设计和一些特定的优点: 1. **轻量级**:相比于DataTables,flexigrid更轻巧,加载速度快,适合资源有限的环境。 2. **自定义列宽**:...

    jQuery表格插件

    jQuery表格插件是一种广泛应用于网页开发中的工具,它利用JavaScript库jQuery的强大功能,为开发者提供了一种简单、高效的方式来创建和操作动态、交互式的表格。这些插件通常包含丰富的功能,如排序、过滤、分页、...

    jquery表格插件带分页动态数据表格代码

    常见的jQuery表格插件有DataTables、jqGrid、Flexigrid等。在本项目中,可能使用的是某一特定的表格插件,通过定制或配置实现所需功能。 二、分页 在大数据量的展示场景下,分页是一种常用的技术手段,可以避免一...

    RIA应用开发:10-jQuery表格插件.ppt

    本篇内容主要介绍了两个常用的jQuery表格插件——DataTables和flexigrid,以及如何实现表格的排序和分页功能。 首先,我们来看表格排序。在RIA应用中,表格排序有两种实现方式:服务器端排序和客户端排序。服务器端...

    Flexigrid-插件

    下面我们将深入探讨Flexigrid的关键特性、使用方法以及与其他jQuery表格插件的比较。 1. **主要特性** - 分页:Flexigrid内置了分页功能,允许用户浏览大量数据时进行快速切换。 - 排序:用户可以对表格中的任何...

    jquery表格排序插件

    常见的jQuery表格排序插件有DataTables、TableSorter、Flexigrid等。例如,DataTables不仅提供了强大的排序功能,还集成了分页、过滤、搜索和自定义列等功能,是一款非常全面的表格增强工具。 在实际应用中,前端...

    再次分享18个非常棒的jQuery表格插件

    以下是根据标题和描述中提到的一些jQuery表格插件的详细说明: 1. DataTables:DataTables是一个功能丰富的表格增强插件,提供了搜索、排序、分页和自定义列显示等特性。它的在线例子展示了如何通过API控制表格的...

    十五款提高表格操作的jQuery插件

    1. **DataTables**:DataTables是一款强大的表格插件,支持排序、搜索、分页等功能,并提供了丰富的定制选项。其Ajax支持使得动态加载数据变得简单。 2. **Flexigrid**:Flexigrid适用于大数据量的表格,提供了灵活...

    jquery biaoge 插件

    3. **高性能**:通过优化的DOM操作和事件处理,jQuery表格插件能够在大量数据展示时保持流畅的性能。 4. **响应式设计**:现代插件通常支持响应式布局,确保在不同设备和屏幕尺寸上的良好显示效果。 5. **数据源...

    jQuery 表格插件整理

    8. DataTables - 是一个非常强大且功能全面的jQuery表格插件,包括可变列宽、分页浏览、现场过滤、多列排序、智能列宽以及从各种数据源获取数据的能力。 9. jqGrid Plugin - 基于Ajax的jQuery表格插件,能够从...

    jQuery表格

    4. **插件化**:jQuery社区有许多第三方表格插件,如DataTables、jqGrid、Flexigrid等,它们提供了更高级的功能,如导出数据、列自适应、列拖动等。 5. **API友好**:jQuery表格的API通常直观且易用,开发者可以...

    flexigrid、sigmagrid、datatables使用

    Flexigrid是一款基于jQuery的轻量级数据网格插件,它提供了灵活的配置选项和丰富的功能,如可调整列宽、排序、分页、搜索等。使用flexigrid,开发者可以通过简单的API设置表格样式和行为,使数据呈现更加直观和交互...

    jQuery特效插件

    7. `flexigrid.zip`:Flexigrid是一个轻量级的表格插件,提供类似DataTables的功能,但更注重性能和可定制性。 8. `jGlideMenu_0.6.7.zip`:jGlideMenu是一款jQuery滑动菜单插件,用于创建美观的多级下拉菜单,增强...

    jQuery插件

    7. **paulopmx-Flexigrid-bebb61e.zip**:Flexigrid是一款旧版但功能强大的表格插件,支持分页、排序、搜索和自定义列宽。 8. **jTip.zip**:这可能是一个jQuery提示插件,用于创建自定义的提示框,提供比默认...

Global site tag (gtag.js) - Google Analytics