 |
2008-03-24 11:40:07
来自: BlueFish
(北京)
| | |
| 标题:我写了一个动态生成表格的JS code,向各位请教些问题 | |
| | | 我是做嵌入式软件WebUI的,在动态的数据生成表格时,以前都是直接document.writeln,这种方法来做,每一个动态表格就要写一次,很麻烦而且以后维护,修改会很困难。
我写了一个类似控件的东东(不知道是否该这么叫),下面是我写的Code,大家帮我看看是否可行。
function draw_tbl(){
var div_id = this.div_id;
var width = this.width;
var border = this.border;
var cellspacing = this.cellspacing;
var cellpadding = this.cellpadding;
var class_sty = this.class_sty;
var data = this.data;
var table_head = this.table_head;
var table_title = this.table_title;
var txt = "";
var div_element = document.getElementById(div_id);
var tbl_element = document.createElement("table");
tbl_element.setAttribute("border",border);
tbl_element.setAttribute("width",width);
tbl_element.setAttribute("cellspacing",cellspacing);
tbl_element.setAttribute("cellpadding",cellpadding);
tbl_element.className = class_sty;
/*------Write Table Head Row------------------------*/
var tbl_head = document.createElement("thead");
/*----Add Table Title-------------------------------*/
var table_title_row = document.createElement("tr");
var table_title_cnt = document.createElement("th");
table_title_cnt.colSpan = table_head[0].length;
table_title_cnt.className = "tb_sty";
table_title_cnt.innerHTML = table_title;
table_title_row.appendChild(table_title_cnt);
tbl_head.appendChild(table_title_row);
/*--------End----------------------------------------*/
/*------Write Table Head--------------------------------*/
var tbl_head_row = document.createElement("tr");
for(i=0;i<table_head[0].length;i++) {
var tbl_th = document.createElement("th");
tbl_th.className = "tb_sty";
tbl_th.innerHTML = table_head[0][i];
tbl_head_row.appendChild(tbl_th);
}
tbl_head.appendChild(tbl_head_row);
/*--------End---------------------------------------------*/
/*--------End of Table Head Row---------------------------------*/
var tbl_body = document.createElement("tbody");
/*-----Write Table Body Row------*/
for(i=0;i<data.length;i++) {
var tbl_Row = document.createElement("tr");
for(j=0;j<data[i].length;j++) {
var tbl_Coll = document.createElement("td");
tbl_Coll.className = "tb_sty";
tbl_Coll.innerHTML = data[i][j];
tbl_Row.appendChild(tbl_Coll);
}
tbl_body.appendChild(tbl_Row);
}
/*--------End-----------------*/
tbl_element.appendChild(tbl_head);
tbl_element.appendChild(tbl_body);
div_element.appendChild(tbl_element);
}
function Table(table_property,div_id,table_data) /*table_property:构造表格的参数;div_id:表格构造的位置;table_data:表格的数据*/
{
this.div_id = div_id;
this.width = table_property.width;
this.border = table_property.border;
this.cellspacing = table_property.cellspacing;
this.cellpadding = table_property.cellpadding;
this.class_sty = table_property.class;
this.table_head = table_property.table_head;
this.table_title = table_property.table_title;
this.data = table_data;
this.tbl_create = draw_tbl;
}
现在是我遇到的问题来了。
问题1:现在我能够动态生成表格了,但是我不知道该怎么控制每列的宽度。因为每个表格每一列的宽度都可能会不一样,这种情况下我该怎么实现?
问题2:每个表格中不可能都是字符类的数据,有可能还会有一些操作控制,比如没行数据可能有添加,删除等的控制按钮。面对这种问题我利用for循环来生成每个单元格的方法,显然是行不通的。可否给我解决问题的方法。
| 2008-03-24 11:40:35 BlueFish
(北京) 请大家多给意见。谢谢大家
|
| 2008-03-24 11:43:55 Hans
(上海) 直接用dom的innerHTML写,利用CSS可以控制宽度。
|
| 2008-03-24 15:56:21 jerry
(北京) 好复杂..建议去读一下baidu mp3 的 歌手页
用document.write辅助生成的table 应该比dom效率高许多.
|
| 2008-03-25 13:01:48 BlueFish
(北京) 但是我每个单元格里,可能不是单纯的string串。有可能是一些input,radio,checkbox,那我应该如何搞呢?之前我就是用document.write这种方法生成的,如果表格多的话,每次都要写一遍,会很烦。所以我在想能不能找个比较通用的办法。
|
| 2008-03-25 13:13:51 huangam
可以参考ext.js里面的grid之类的
|
| 2008-03-25 13:48:46 BlueFish
(北京) 感谢楼上各位的帮助,Hans和Jerry兄的方法就是我原来使用的方法。yin123我看了你做的股票走势的图,做的很PP,但是如果数据量很大的时候,生成速度会不会很慢呢?
huangam兄的介绍的这个貌似就是我想要的东东。我还需要学习学习。呵呵。
总之再次感谢各位帮助。
|
| 2008-04-24 21:20:49 hillman
(广州) 用dom是最干净、快捷、易扩展的。而且要将这个东西做成组件的话,dom还是必须的。
至于数据量大的问题,如果数据不必一次看完的话,可以将数据分批插入。例如在加载时,生成表格外框后,插入100行就停止了,当每次页面滚动到最下时再插入20行。
|
| 2008-06-03 15:55:49 隐湖之鲤
如果表格很大的话,用innerHTML方式生成会快很多
|
> 我来回应
|