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

自适应以前效果图:

相关文章
相关标签/搜索