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

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

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

<!-- 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组件的基础。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Row Border in DataGrid - jQuery EasyUI Demo</title>
    <link rel="stylesheet" type="text/css" href="../jquery-easyui-1.5/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../jquery-easyui-1.5/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../jquery-easyui-1.5//demo/demo.css">
    <script type="text/javascript" src="../jquery-easyui-1.5/jquery.min.js"></script>
    <script type="text/javascript" src="../jquery-easyui-1.5/jquery.easyui.min.js"></script>
</head>
<body>
<h2>Row Border in DataGrid</h2>
<p>This sample shows how to change the row border style of datagrid.</p>
<div style="margin:20px 0;">
    <span>Border:</span>
    <select οnchange="changeBorder(this.value)">
        <option value="lines-both">Both</option>
        <option value="lines-no">No Border</option>
        <option value="lines-right">Right Border</option>
        <option value="lines-bottom">Bottom Border</option>
    </select>
    <span>Striped:</span>
    <input type="checkbox" οnclick="$('#dg').datagrid({striped:$(this).is(':checked')})">
</div>
<table id="dg" class="easyui-datagrid" title="Row Border in DataGrid" style="width:700px;height:250px"
       data-options="singleSelect:true,fitColumns:true,url:'datagrid_data1.json',method:'get'">
    <thead>
    <tr>
        <th data-options="field:'itemid',width:80">Item ID</th>
        <th data-options="field:'productid',width:100">Product</th>
        <th data-options="field:'listprice',width:80,align:'right'">List Price</th>
        <th data-options="field:'unitcost',width:80,align:'right'">Unit Cost</th>
        <th data-options="field:'attr1',width:250">Attribute</th>
        <th data-options="field:'status',width:60,align:'center'">Status</th>
    </tr>
    </thead>
</table>
<script type="text/javascript">
    function changeBorder(cls){
        /*getPanel	none	Return the panel object.*/
        /*removeClass是jQuery的方法*/
        $('#dg').datagrid('getPanel').removeClass('lines-both lines-no lines-right lines-bottom').addClass(cls);
    }
</script>
<style type="text/css">
    .lines-both .datagrid-body td{
    }
    .lines-no .datagrid-body td{
        border-right:1px dotted transparent;
        border-bottom:1px dotted transparent;
    }
    .lines-right .datagrid-body td{
        border-bottom:1px dotted transparent;
    }
    .lines-bottom .datagrid-body td{
        border-right:1px dotted transparent;
    }
</style>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值