jQuery EasyUI Datagrid组件的完整的基础DOM结构

标题可能有点长,什么叫“完整的基础DOM结构”,这里“基础”的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会存在这样的基础DOM结构;而“完整”的意思是指在冻结列,冻结行,标题,footer,分页这些功能块都存在时候的DOM结构。

要搞清楚Datagrid的工作原理,这个DOM结构必须要烂熟于胸的,我们直接来看这个“基础完整DOM结构”是什么样子的:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!-- datagrid的最外层容器,可以使用$(target).datagrid(‘getPanel‘)或者$.data(target,‘datagrid‘).panel得到这个DOM对象,这个DOM上其实承载了panel组件-->
<div class="panel datagrid">
    <!-- datagrid的标题区域容器,对应于panel组件的header部分,可以使用$(target).datagrid(‘getPanel‘).panel(‘header‘)得到这个DOM对象-->
    <div class="panel-header">
        <div class="panel-title"></div>
        <div class="panel-tool"></div>
    </div>
    <!-- datagrid的主体区域容器,对应于panel组件的body部分,可以使用$(target).datagrid(‘getPanel‘).panel(‘body‘)得到这个DOM对象-->
    <div class="datagrid-wrap panel-body">
        <!--工具栏-->
        <div class="datagrid-toolbar"></div>
        <!-- datagrid视图部分的容器,这是datagrid组件DOM结构的核心,其基础视图结构跟datagrid的view属性无任何关系。-->
        <!-- 对应dc.view -->
        <div class="datagrid-view">
            <!-- div.datagrid-view1负责展示冻结列部分(包含行号或者frozenColumns)的数据-->
            <!-- 对应dc.view1 -->
            <div class="datagrid-view1">
                <!--列标题部分-->
                <div class="datagrid-header">
                    <!-- 对应dc.header1 -->
                    <div class="datagrid-header-inner">
                        <!--样式里有htable关键字,h代表header的意思-->
                        <table class="datagrid-htable">
                            <tbody>
                                <tr class="datagrid-header-row"></tr>
                            </tbody>
                        </table>
                    </div>
                </div>
                <!--列数据部分-->
                <div class="datagrid-body">
                    <!-- 对应dc.body1 -->
                    <div class="datagrid-body-inner">
                        <!--frozenRows部分(有数据才会有这个table,故不属于基础DOM结构),固定行是1.3.2版本之后才加的功能,注意datagrid-btable-frozen关键样式,btable代码body table的意思-->
                        <table class="datagrid-btable datagrid-btable-frozen"></table>
                        <!--普通rows部分(有数据才会有这个table,故不属于基础DOM结构)-->
                        <table class="datagird-btable"></table>
                    </div>
                </div>
                <!--footer部分-->
                <div class="datagrid-footer">
                    <!-- 对应dc.footer1 -->
                    <div class="datagrid-footer-inner">
                        <!--ftable代表footer table的意思-->
                        <table class="datagrid-ftable"></table>
                    </div>
                </div>
            </div>
            <!-- div.datagrid-view2负责展示非冻结列部分的数据,大家注意到冻结列和普通列视图是分开的,也就是说冻结列和普通列是在不同表格中展示的,这样会产生一个问题,那就是两个表格行高之间的同步问题。-->
            <!-- 对应dc.view2 -->
            <div class="datagrid-view2">
                <!--列标题部分-->
                <div class="datagrid-header">
                    <!-- 对应dc.header2 -->
                    <div class="datagrid-header-inner">
                        <table class="datagrid-htable">
                            <tbody>
                                <tr class="datagrid-header-row"></tr>
                            </tbody>
                        </table>
                    </div>
                </div>
                <!--列数据部分,注意这里并无datagrid-body-inner这个子元素,而冻结列对应的body却是有的,这个是细微区别-->
                <!-- 对应dc.body2 -->
                <div class="datagrid-body">
                    <!--frozenRows部分有数据才会有这个table,故不属于基础DOM结构,固定行是1.3.2版本之后才加的功能,-->
                    <table class="datagrid-btable datagrid-btable-frozen"></table>
                    <table class="datagrid-btable"></table>
                </div>
                <!--footer部分-->
                <div class="datagrid-footer">
                    <!-- 对应dc.footer2 -->
                    <div class="datagrid-footer-inner">
                        <table class="datagrid-ftable"></table>
                    </div>
                </div>
            </div>
        </div>
        <!--分页部分-->
        <div class="datagrid-pager pagination"></div>
    </div>
</div>

对于这个DOM结构,我在html代码里面已经做了简单说明,这里提一下绑定于Datagrid宿主table上的对象的dc属性,这个dc属性存储了对DOM结构里不同部分的引用,获取dc属性的方法:

1
$.data(target,‘datagrid‘).dc;

而dc属性跟DOM的对应关系,我也在html中做了详细注释,请大家自行查看,这些都是我们深入认识Datagrid组件的基础

时间: 2024-10-10 09:18:05

jQuery EasyUI Datagrid组件的完整的基础DOM结构的相关文章

jQuery EasyUI Datagrid组件默认视图分析

在Datagrid基础DOM结构的一文中,我对Datagrid组件的骨架做了很详细的描述.有了骨架还并不完整,还得有血有肉有衣服穿才行.强大的Datagrid组件允许我们自己定义如何在基础骨架上长出健壮诱人的身体,我们只要定义Datagrid的视图就可以实现. 在大多数情况下,我们并无特别要求,Datagrid给我们提供了默认的视图,默认视图被使用在90%以上的场景,所以对默认视图的分析显得非常有必要.注意视图里面定义了哪些接口,哪些方法,如果要自己写视图的话,最好把这些接口和方法都写齐全.话不

[JS][easyui]jQuery EasyUI Datagrid VirtualScrollView视图简单分析

 大家都知道EasyUI的Datagrid组件在加载大数据量时的优势并不是很明显,相对于其他一些框架,如果数据量达到几千,便会比较慢,特别是在IE下面.针对这种情况,我们首要做的是要相办法优化datagrid组件的各方面性能,不过任何事情都是可以变通解决的,virtualScrollView就是一种不错的解决方案. virtualScrollView的准则就是尽量少画tr到table里,表格的高度是有限的,而用户的可见区域是很有限的,所以数据量很大的时候,是没有必要将所有数据数据都画到表格中

jQuery EasyUI Datagrid性能优化专题

jQuery EasyUI的Datagrid组件功能算是很强大了,不过性能确实不怎么乐观,而对于性能问题,网络上几乎也找不到相关的优化资料,所谓的牛人们可能 都望而却步了.本博客以后会带着分析Datagrid组件的性能问题,并且给出优化方案,也希望大家能集思广益,给出一些好的想法. 慢在哪些方面 以目前对Datagrid的了解程度去看待性能问题,主要有以下几点: 加载大数据量时比较慢(不考虑服务端返回数据的时间),这点尤其体现在IE浏览器里面: 大数据量时,加载后,操作很不流畅,勾选慢,sing

jQuery EasyUI datagrid列名包含特殊字符会导致表格错位

首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为用户的SQL是千奇百怪的,所以出现了诸如:"BLOCKS*8/1024","trunc(SYSDATE)"之类的列名(field)时,表格就会错位,而且含有特殊字符的列无法手工调整大小. 经分析,datagrid组件在画表格的时候会在宿主DOM后动态追加一个style节

jQuery EasyUI DataGrid Checkbox

转自:http://blog.csdn.net/baronyang/article/details/9323463 这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数据列的 Checkbox 设定为 Checked,另外就是两种 Checkbox 设定方式下如何取得有勾选的数据. 有关 jQuery EasyUI DataGrid 的相关资料,可以前往官网查看, jQuery EasyU

jquery easyui datagrid 排序列

点击排序列,将获取参数有:page=1&rows=10&sort=UserName&order=desc c#后台获取sort跟order参数 string sortColumn = Request.Params["sort"].ToString(); string order = Request.Params["order"].ToString(); jquery easyui datagrid 排序列,布布扣,bubuko.com

Jquery easyui datagrid 导出Excel

datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <script> 2 /** 3 Jquery easyui datagrid js导出excel 4 修改自extgrid导出excel 5 * allows for downloading of grid data (store) directly into excel 6 * Method: extracts data of gridPanel store, uses columnModel to constru

jquery easyui datagrid设置行样式 不可删除某行

rowStyler: function (index,row) { if (parseInt(row.ksrs) > 0) { return 'color:red'; } }, onLoadSuccess:function(data){ var rows = data.rows; for (var j = 0; j < rows.length; j++) { if (parseInt(rows[j]["ksrs"]) > 0) { $(".datagrid-

JQuery easyUi datagrid 中 editor 动态设置最大值最小值

前言 近来项目中使用到 easyui 来进行页面设计,感觉挺方便的,但是网上除了api外,其他有价值的资料比较少,故在此分享一点经验,供大家参考. 问题 JQuery easyUi datagrid 可编辑行的editor属性具有 min 和 max 属性,设置可以输入的最大值和最小值,但是这个是固定的,如下: [html] view plain copy {field:'workRate',title:'<%/*填报*/%><bean:message key="task.wo