JQuery EasyUI之DataGrid列名和資料列分別設定不同對齊(轉)

來源:互聯網
上載者:User

標籤:

需求如下

現有資料列三列

Name,Age,CreateDate

資料

張三,18,2000-12-09 :12:34:56

李四,28,2000-12-09 :12:34:56

王麻子,38,2000-12-09 :12:34:56

Jquery Easyui DataGrid中列設定

{ field: ‘Name‘, title: ‘名稱‘, width: 120 ,align:left},
{field: ‘Age‘, title: ‘年齡‘, width: 120 ,align:right},
{ field: ‘CreateDate‘, title: ‘建立日期‘, width: 120,align:center},

以上的align屬性對列表名和資料都有效,就是列名和資料對齊是一樣的,

 --------------------- --------------------- ---------------------

要想不一樣,必須能夠單獨設定列名或者資料行,對column增加一個欄位,

第一種方式,假設align針對列名有效,可以增加一個dataalign針對資料列有效

{ field: ‘Name‘, title: ‘名稱‘, width: 120 ,align:center,dataalign:left},
{field: ‘Age‘, title: ‘年齡‘, width: 120 ,align:center,dataalign:right},
{ field: ‘CreateDate‘, title: ‘建立日期‘, width: 120,align:center,dataalign:left},

 

在onLoadSuccess添加如下代碼,針對每個資料列重新

123456789101112131415161718 onLoadSuccess: function (data) {  var fields=$("#tt").datagrid(‘getColumnFields‘,false);  //擷取資料表的每一行,注意如果不加.datagrid-view2限制,則含有行號表  var bodyTts = $(".datagrid-view2 .datagrid-body table tr.datagrid-row");  bodyTts.each(function (ii, objj) {    //datagrid主體 table 的每一個tr 的td們    var bodyTds = $(objj).children();    bodyTds.each(function (i, obj) {      //擷取當前列的資訊      var col = $("#tt").datagrid(‘getColumnOption‘,fields[i]);      if (!col.hidden && !col.checkbox)      {        var dataalign=col.dataalign||col.align||‘left‘;        $("div:first-child", obj).css("text-align", dataalign);      }    })  })}

這種方式的壞處在於資料一般很多,所以遍曆這些資料需要花比較多時間

 --------------------- --------------------- ---------------------

 第二種方式,假設column裡面的align是針對資料有效,另外增加一個headalign來設定表頭列對齊

{ field: ‘Name‘, title: ‘名稱‘, width: 120 ,align:center,headalign:left},
{field: ‘Age‘, title: ‘年齡‘, width: 120 ,align:center,headalign:right},
{ field: ‘CreateDate‘, title: ‘建立日期‘, width: 120,align:center,headalign:left},

 1 onLoadSuccess: function (data) { 2     var fields=$("#tt").datagrid(‘getColumnFields‘,false); 3     //datagrid頭部 table 的第一個tr 的td們,即columns的集合 4     var panel = $("#tt").datagrid("getPanel");   5     var headerTds =panel.find(".datagrid-view2 .datagrid-header .datagrid-header-inner table tr:first-child").children(); 6  7     //重新設定列表頭的對齊 8     headerTds.each(function (i, obj) { 9         var col = $("#tt").datagrid(‘getColumnOption‘,fields[i]);10         if (!col.hidden && !col.checkbox)11         {12             var headalign=col.headalign||col.align||‘left‘;13             $("div:first-child", obj).css("text-align", headalign);14         }15     })16 }

 

其實上述兩段代碼可以看出,第二種方式開銷比第一種小很多,所以推薦第二種

 

紅色的#tt是我datagrid的id,請用的時候改成你自己的

上述兩種使用方法都是直接配置+代碼方式

 --------------------- --------------------- ---------------------

第三種方式其實就是第二種 只不過算是擴充,使用起來更簡單

 1 /**  2 * 擴充表格列對齊屬性:  3 *      自訂一個欄欄位屬性:  4 *      headalign :原始align屬性針對資料有效, headalign針對列名有效 5 *       6 */   7 $.extend($.fn.datagrid.defaults,{   8     onLoadSuccess : function() {   9         var target = $(this);  10         var opts = $.data(this, "datagrid").options;  11         var panel = $(this).datagrid("getPanel");  12         //擷取列13         var fields=$(this).datagrid(‘getColumnFields‘,false);14         //datagrid頭部 table 的第一個tr 的td們,即columns的集合15         var headerTds =panel.find(".datagrid-view2 .datagrid-header .datagrid-header-inner table tr:first-child").children();16         //重新設定列表頭的對齊17         headerTds.each(function (i, obj) {18             var col = target.datagrid(‘getColumnOption‘,fields[i]);19             if (!col.hidden && !col.checkbox)20             {21                 var headalign=col.headalign||col.align||‘left‘;22                 $("div:first-child", obj).css("text-align", headalign);23             }24         })25     }  26 });  

使用方法:

儲存為jquery.easyui.datagrid2.js檔案,引用

添加<script src="jquery.easyui.datagrid2.js" type="text/javascript"></script>

增加headalign屬性

{ field: ‘Name‘, title: ‘名稱‘, width: 120 ,align:center,headalign:left}

-------------------------------------------------

第四種方式,源碼修改,終極大法

我是用Jquery Easyui  1.2.4的源碼(未經加密的)來說明的,其它版本大致應該不會相差很遠

其實主要就是text-align這個屬性上面

在源碼搜尋text-align,第7929行有如下代碼(buildGridHeader方法內)

cell.css(‘text-align‘, (col.align || ‘left‘));

 這句話就是修改列表頭的對齊.預設是left,也就是說不用設定,就是left

很明顯,還是套用第二種方式的,列增加headalign屬性,7929行改成

cell.css(‘text-align‘, (col.headalign||col.align||‘left‘));

 然後,就結束了,哈哈

其實你要是喜歡針對資料列dataalign,9496行也有text-align(renderRow方法內)

style += ‘text-align:‘ + (col.align || ‘left‘) + ‘;‘;

 可以用來等同第一種方式

style += ‘text-align:‘ + (col.dataalign||col.align||‘left‘) + ‘;‘;

如果你喜歡折騰原始碼,請使用第四種,最簡單,哈哈

如果你喜歡乾淨的源碼,且配置少,代碼少,可以用第三種方式

如果你喜歡麻煩,可以用第二或者第一種方式

JQuery EasyUI之DataGrid列名和資料列分別設定不同對齊(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.