function createSimpleTable(data, id) {
var option = {};
option.columns = [ [] ];//表头
var datas = {
"total" : data.respcount[0],
"rows" : []
};//数据
var avgW = 960 / data.field[0].length;
if (data.respcount[0] == 0) {
for ( var i = 0; i < data.field[0].length; i++) {
var field = {
field : 'q_' + i,
title : data.field[0][i],
width : avgW,
align : 'center'
};
option.columns[0].push(field);
}
} else {
for ( var j = 0; j < data.data.length; j++) {
var onerow = {};
for ( var i = 0; i < data.field[0].length; i++) {
if (j == 0) {
var field = {
field : 'q_' + i,
title : data.field[0][i],
width : avgW,
align : 'center',
sortable : true
};
option.columns[0].push(field);
}
var d = !isNaN(Number(data.data[j][i]))?Number(data.data[j][i]):data.data[j][i];
onerow['q_' + i] = d;
}
datas.rows.push(onerow);
}
}
$('#' + id).datagrid(option);//生成表头
$('#' + id).datagrid('loadData', datas);//生成数据
}function createSimpleTable(data, id)  参数data是ajax返回的查询数据,id是生成table的id现在的问题是:
1。返回数据其中的一个字段是时间,格式是YYYY-MM-DD HH24:MI:SS 比其他字段长,但是现在每个<td>都一样的宽度,有的多了,时间字段那个显示不全,怎么改可以让时间字段显示全,或者能根据数据长度自动调节最好
2.给我介绍下这个js,别人写的 还不是很懂

解决方案 »

  1.   

    var avgW = 960 / data.field[0].length;这个就是table 的 td 宽度吧, 为什么要用960去/字段长度  ?
      

  2.   

    这个JS脚本,借助了jQuery的一个插件:datagrid,也就是最后两行代码干的事情。
    楼主需要去了解下这个插件自身的参数能力,看是否支持自适应宽度(一般来说希望渺茫)。
    这段代码基本上就三个部分:if (data.respcount[0] == 0) { 
    —— 这段代码似乎是处理空数据行的情况} else {
    —— 这段代码处理有数据行,就循环生成datagrid插件所需的二维数组$('#' + id).datagrid(option);//生成表头
    $('#' + id).datagrid('loadData', datas);//生成数据
    —— 借助datagrid插件生成表格
    var avgW = 960 / data.field[0].length;
    960 估计是按照1024的屏幕标准宽度,然后去掉左右两侧的一些边距(比如滚动条啥的)得来的,不过我们一般是用1002。
      

  3.   


    这个js方法是个通用的,就是说如果我有100个查询业务,返回数据的字段可能都不一样,我也不确定哪一个就是时间字段,
    这个表头是怎么存放的option.columns = [ [] ];//表头
    ,能不能遍历表头看是否包含"*时间",如果有就额外给这个对应列加一点点px的宽度?现在时间显示到MI:了 ,就差一点宽度
      

  4.   

    这个有一定可能性,关键代码是这段:
    if (j == 0) {
        var tmp = avgW; // 设个临时值
        if (data.field[0][i].indexOf('时间') >=0 ) tmp = 100; // 按需修改
        var field = {
            field : 'q_' + i,
            title : data.field[0][i],
            width : tmp, // 改为该临时值
            align : 'center',
            sortable : true
        };
        option.columns[0].push(field);
    }
    我本地没有环境,你测试下看看。
      

  5.   

    用title判断不太好,因为是通用的,所以title很有可能包含时间两个文字,但是数据不是时间类型的,所以用正则判断数据是否符合时间类型可能更通用一些借用LS的代码vat regex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/;
    if (j == 0) {
        var tmp = avgW; // 设个临时值
        //if (data.field[0][i].indexOf('时间') >=0 ) tmp = 100; // 按需修改
        if (regex.test(data.data[j][i])) tmp = 100;
        var field = {
            field : 'q_' + i,
            title : data.field[0][i],
            width : tmp, // 改为该临时值
            align : 'center',
            sortable : true
        };
        option.columns[0].push(field);
    }
      

  6.   

    问题解决了我多划一份宽度给时间
    var avgW = 960 / (data.field[0].length+1)给时间 2*avgW
    if (j == 0) {
    就是表头, 宽度实际上在表头行就定了