zoukankan      html  css  js  c++  java
  • 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组件的基础

  • 相关阅读:
    【转】微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应
    解决vscode egg调试出现: this socket has been ended by other party【转】
    高仿Readhub小程序 微信小程序项目【原】
    git 解决二进制文件冲突
    webpack 打包编译-webkit-box-orient: vertical 后消失
    H5 history.pushState 在微信内修改url后点击用safari打开/复制链接是修改之前的页面
    vue 路由懒加载 使用,优化对比
    jq自定义多选下拉列表框
    System V IPC相关函数
    互斥锁和条件变量(pthread)相关函数
  • 原文地址:https://www.cnblogs.com/spray1990/p/4092403.html
Copyright © 2011-2022 走看看