我写了一个动态生成表格的JS code,向各位请教...

BlueFish 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循环来生成每个单元格的方法,显然是行不通的。可否给我解决问题的方法。


欢迎推荐小组话题,请先登录或注册

快速注册

你的email地址:
请填写email 用于确认你的身份, 豆瓣绝不会公开你的email。

给自己设一个密码:
请填写长度大于3的密码 你需要用它登录, 请使用英文字母、符号或数字。

给自己起一个名号:
起个名号吧 中、英文均可。



BlueFish

2008-03-24 11:40:35 BlueFish (北京)

  请大家多给意见。谢谢大家



Hans

2008-03-24 11:43:55 Hans (上海)

  直接用dom的innerHTML写,利用CSS可以控制宽度。



jerry

2008-03-24 15:56:21 jerry (北京)

  好复杂..建议去读一下baidu mp3 的 歌手页
  用document.write辅助生成的table 应该比dom效率高许多.



yin123

2008-03-24 22:55:06 yin123

  同意hans的方法,用innerhtml 
  可以看我的http://two.xthost.info/nextkey/的代码
  整个K线图都是一个一个的小表格,形成一个string 给innerHTML



BlueFish

2008-03-25 13:01:48 BlueFish (北京)

  但是我每个单元格里,可能不是单纯的string串。有可能是一些input,radio,checkbox,那我应该如何搞呢?之前我就是用document.write这种方法生成的,如果表格多的话,每次都要写一遍,会很烦。所以我在想能不能找个比较通用的办法。



huangam

2008-03-25 13:13:51 huangam

  可以参考ext.js里面的grid之类的



BlueFish

2008-03-25 13:48:46 BlueFish (北京)

   感谢楼上各位的帮助,Hans和Jerry兄的方法就是我原来使用的方法。yin123我看了你做的股票走势的图,做的很PP,但是如果数据量很大的时候,生成速度会不会很慢呢?
   huangam兄的介绍的这个貌似就是我想要的东东。我还需要学习学习。呵呵。
   总之再次感谢各位帮助。



hillman

2008-04-24 21:20:49 hillman (广州)

  用dom是最干净、快捷、易扩展的。而且要将这个东西做成组件的话,dom还是必须的。
  
  至于数据量大的问题,如果数据不必一次看完的话,可以将数据分批插入。例如在加载时,生成表格外框后,插入100行就停止了,当每次页面滚动到最下时再插入20行。



隐湖之鲤

2008-06-03 15:55:49 隐湖之鲤

  如果表格很大的话,用innerHTML方式生成会快很多




想参加讨论,请先登录或注册

快速注册

你的email地址:
请填写email 用于确认你的身份, 豆瓣绝不会公开你的email。

给自己设一个密码:
请填写长度大于3的密码 你需要用它登录, 请使用英文字母、符号或数字。

给自己起一个名号:
起个名号吧 中、英文均可。

© 2005-2008 douban.com, all rights reserved 关于豆瓣 · 社区指导原则 · 隐私原则 · 豆瓣服务(API)