日期:2014-05-17  浏览次数:20705 次

100分 求思路, js 问题
JScript code

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,别人写的 还不是很懂

------解决方案--------------------
这个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。
------解决方案--------------------
这个有一定可能性,关键代码是这段:

JScript code

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);
}

------解决方案--------------------
用title判断不太好,因为是通用的,所以title很有可能包含时间两个文字,但是数据不是时间类型的,所以用正则判断数据是否符合时间类型可能更通用一些

借用LS的代码

JScript code
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);
}