1. 程式人生 > >jQuery EasyUI Datagrid元件的完整的基礎DOM結構

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元件的基礎。

  ******轉載:http://www.easyui.info/archives/1157.html