easyUI datagrid 列寬自適應(簡單 圖解)(轉)

響應數據格式:javascript

easyUI在html代碼中結構:html

發現了什麼沒有,咱們的表頭實際上是一個td在td中有一個屬性field那麼咱們就能夠得到了;java

如下就是自適應代碼:jquery

[javascript] view plain copy
print ?
  1. //添加事件  
  2.                  function columnWidthAutoResize(){  
  3.                        
  4.                      var cls=arguments[0];//須要自適應的列的名稱  
  5.                        
  6.                       $('#grid').datagrid({  
  7.                           onLoadSuccess:function(data){  
  8.                              var rows=data.rows;//獲得行數據  
  9.                              var columnMaxCharacter=new Array();//該列最大字符數  
  10.                               //遍歷全部行數據,得到該列數據的最大字符數  
  11.                               for(var i=0;i<rows.length;i++){  
  12.                                  for(var j=0;j<cls.length;j++){//遍歷須要設置的列  
  13.                                      var s=eval("rows["+i+"]."+cls[j]);  
  14.                                      //屏蔽html標籤  
  15.                                       s=s.replace("<center>","");  
  16.                                       s=s.replace("</center>","");  
  17.                                      if((typeof columnMaxCharacter[cls[j]])=='undefined'){  
  18.                                          columnMaxCharacter[cls[j]]=0;  
  19.                                      }  
  20.                                        
  21.                                     if(s.length>columnMaxCharacter[cls[j]]){  
  22.                                         columnMaxCharacter[cls[j]]=s.length;  
  23.                                      }  
  24.                                       
  25.                                  }  
  26.                               }  
  27.                                 
  28.                               //設置列寬度和字體  
  29.                               for(var j=0;j<cls.length;j++){  
  30.                                   //獲得該列的字體  
  31.                               //    alert($("td[field='"+cls[j]+"'] div").get(0).currentStyle);  
  32.                               // var fontSize=$("td[field='"+cls[j]+"'] div").get(0).currentStyle.fontSize;//得到字體大小  
  33.                                  //  fontSize= fontSize.replace("px","");//去掉px方便運算  
  34.                                   var fontSize=12;  
  35.                                   var w=fontSize*(columnMaxCharacter[cls[j]]+1);//求出寬度  
  36.                                   //設定該列的寬度  
  37.                                   $("td[field='"+cls[j]+"'] div").width(w);  
  38.                               }  
  39.                                
  40.                           }  
  41.                       });  
  42.                  }  

下面在看如何調用:傳入的參數的那一列須要自適應寬度:

[javascript] view plain copy
print ?
  1. columnWidthAutoResize(new Array("orgname","showtime"));  

對以上代碼的解釋:api

[javascript] view plain copy
print ?
  1. var cls=arguments[0];//須要自適應的列的名稱  
接受傳入的須要自適應的列的名稱數組;

[javascript] view plain copy
print ?
  1. var rows=data.rows;//獲得行數據  
獲得從服務器端響應的數據行集合

[javascript] view plain copy
print ?
  1. var columnMaxCharacter=new Array();//該列最大字符數  
記錄須要設定列的字符最大數 (只是對中文考慮了,沒有考慮英文) 最後的格式鍵值的形式   數組名['須要設定列名']=循環後最大字符

[javascript] view plain copy
print ?
  1. for(var i=0;i<rows.length;i++){  
遍歷全部的數據行,

[javascript] view plain copy
print ?
  1. for(var j=0;j<cls.length;j++){//遍歷須要設置的列  

[javascript] view plain copy
print ?
  1. var s=eval("rows["+i+"]."+cls[j]);  
動態腳本 執行取出該行對應屬性的字符串  rows[1].orgname 等效


[javascript] view plain copy
print ?
  1. //屏蔽html標籤  
  2.                                      s=s.replace("<center>","");  
  3.                                      s=s.replace("</center>","");  
html標籤不是顯示值,因此不能看成字符算;

[javascript] view plain copy
print ?
  1. if((typeof columnMaxCharacter[cls[j]])=='undefined'){  
  2.                                         columnMaxCharacter[cls[j]]=0;  
  3.                                     }  
若是第一次 沒有給該列設置最大字符數是undefined 給默認值0 方便後面的對比


[javascript] view plain copy
print ?
  1. if(s.length>columnMaxCharacter[cls[j]]){  
  2.                                     columnMaxCharacter[cls[j]]=s.length;  
  3.                                     }  
  4.                                     //alert(columnMaxCharacter[cls[j]]);  
  5.                                 }  

若是當前的s的長度比以前的該列的字符數大,那麼直接設置當前字符數爲最大值數組

[javascript] view plain copy
print ?
  1. for(var j=0;j<cls.length;j++){  
這個循環遍歷的是獲得每一列最大字符數以後的數組,cls對應columnMaxCharacter的鍵值的形式

[javascript] view plain copy
print ?
  1. var fontSize=12;  
這個是默認字體的大小,爲何寫死值,是由於暫時沒有找到在火狐下獲得默認字體大小的方法 $("td[field='"+cls[j]+"'] div").get(0).currentStyle.fontSize(火狐不支持)

[javascript] view plain copy
print ?
  1. var w=fontSize*(columnMaxCharacter[cls[j]]+1);//求出寬度  
這裏是用 字體大小 * 該列最大字符數 + 1 獲得列的寬度

[javascript] view plain copy
print ?
  1. $("td[field='"+cls[j]+"'] div").width(w);  
獲得表頭設置寬度,這裏獲得的就是表頭,看上面第二張圖片

轉載註明請地址
服務器

easyUI版本:jQuery-easyui-1.2.5微信

若是你們發現其中不足,請指出,謝謝!app


自適應以後效果圖:
oop

自適應以前效果圖:

相關文章
相關標籤/搜索