找回密码
 注册
搜索

关于table表格的列移动问题

水妖精 2008-3-20 09:15 显示全部楼层 阅读模式 来自: 中国辽宁大连
因为DOM文档对象只有针对行(row)移动的操作,所以列移动只能自己写函数,通过单元格的循环移动来实现。

测试代码如下:

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>无标题文档</title>
  5. </head>
  6. <body>
  7. <script language="javascript">
  8. function addCol(tableName,Row,Col)
  9. {
  10. var optTable=document.getElementById(tableName);
  11. var newRowObj = null;
  12. var newNameCell = null;
  13. for(i=0;i<Row;i++)
  14. {
  15.   newRowObj = optTable.rows(i);
  16.   for(j=1;j<=Col;j++)
  17.   {
  18.    newNameCell = newRowObj.insertCell(j);
  19.    if(i==0){
  20.     newNameCell.innerHTML = "tableColumn" + j;
  21.    }
  22.    else{
  23.    newNameCell.innerHTML = "i am " + j +" col";
  24.    }
  25.   }
  26. }

  27. }
  28. function moveCol(tableName,startCol,endCol)
  29. {
  30. var optTable=document.getElementById(tableName);
  31. var newRowObj = null;
  32. var startCellObj = null;
  33. var endCellObj = null;
  34. var temp = null;
  35. for(i=0;i<optTable.rows.length;i++)
  36. {
  37.   newRowObj = optTable.rows(i);
  38.   startCellObj = newRowObj.cells(startCol);
  39.   endCellObj = newRowObj.cells(endCol);
  40.   temp=startCellObj.innerHTML;
  41.   startCellObj.innerHTML=endCellObj.innerHTML;
  42.   endCellObj.innerHTML=temp;
  43. }

  44. }
  45. </script>
  46. <table id="table1" border="2"  onclick="moveCol(this.id,1,2)">
  47. <tr>
  48. <th>A</th><td><a href="##">A1</a></td><TD>A2</TD>
  49. </tr>
  50. <tr>
  51. <th>B</th><td>B1</td><TD>B2</TD>
  52. </tr>
  53. <tr>
  54. <th>C</th><TD>C1</TD><TD>C2</TD>
  55. </tr>
  56. </table>
  57. </body>
  58. </html>
复制代码


但是目前发现一个问题,通过读取数据库生成的表格,会提示没有对象的脚本错误。不知和解,请高手赐教。
回复

使用道具 举报

大神点评2

 楼主| 水妖精 2008-3-20 14:06 显示全部楼层 来自: 中国辽宁大连
目前是从数据库中按行循环读取的数据,如何使其中一行的buttom获取同列不同行的控件ID号呢?
回复 支持 反对

使用道具 举报

徐志摩 2008-3-23 02:09 显示全部楼层 来自: 中国辽宁大连
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        
  5.         <title>Untitled Document</title>
  6.     </head>
  7.     <body >
  8.         <script>
  9.             function addCol(tableName, Row, Col){
  10.                 var optTable = document.getElementById(tableName);
  11.                 var newRowObj = null;
  12.                 var newNameCell = null;
  13.                 for (i = 0; i < Row; i++) {
  14.                     newRowObj = optTable.rows;
  15.                     for (j = 1; j <= Col; j++) {
  16.                         newNameCell = newRowObj.insertCell(j);
  17.                         if (i == 0) {
  18.                             newNameCell.innerHTML = "tableColumn" + j;
  19.                         }
  20.                         else {
  21.                             newNameCell.innerHTML = "i am " + j + " col";
  22.                         }
  23.                     }
  24.                 }
  25.                
  26.             }
  27.             
  28.             function moveCol(tableName, startCol, endCol){
  29.                 var optTable = document.getElementById(tableName);
  30.                 var newRowObj = null;
  31.                 var startCellObj = null;
  32.                 var endCellObj = null;
  33.                 var temp = null;
  34.                 for (i = 0; i < optTable.rows.length; i++) {
  35.                     newRowObj = optTable.rows;
  36.                     startCellObj = newRowObj.cells[startCol];
  37.                     endCellObj = newRowObj.cells[endCol];
  38.                     temp = startCellObj.innerHTML;
  39.                     startCellObj.innerHTML = endCellObj.innerHTML;
  40.                     endCellObj.innerHTML = temp;
  41.                 }
  42.                
  43.             }
  44.             
  45.             function findIdByCol(){
  46.                 var optTable = document.getElementById('table1');
  47.                 var rows = optTable.rows;
  48.                 //循环行
  49.                 for (i = 0; i < rows.length; i++) {
  50.                     cols = rows.getElement...yTagName('td');
  51.             //循环列
  52.                     for (j = 0; j < cols.length; j++) {
  53.                //设置单击事件
  54.                         cols[j].onclick = function(){
  55.                             var msg = "";
  56.                             for (m = 0; m < rows.length; m++) {
  57.                                msg += rows[m].cells[this.cellIndex].id + "\n";
  58.                             }                           
  59.                             alert(msg);
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.             
  65.         </script>
  66.         <table id="table1" border="2">
  67.             <tr>
  68.                 <td id="1_1_a" width="80px">
  69.                     A
  70.                 </td>
  71.                 <td id="1_2_a1" width="80px">
  72.                     <a href="##">A1</a>
  73.                 </td>
  74.                 <TD id="1_3_a2" width="80px">
  75.                     A2
  76.                 </TD>
  77.             </tr>
  78.             <tr>
  79.                 <td id="2_1_b">
  80.                     B
  81.                 </td>
  82.                 <td id="2_2_b1">
  83.                     B1
  84.                 </td>
  85.                 <TD id="2_3_b2">
  86.                     B2
  87.                 </TD>
  88.             </tr>
  89.             <tr>
  90.                 <td id="3_1_c">
  91.                     C
  92.                 </td>
  93.                 <TD id="3_2_c1">
  94.                     C1
  95.                 </TD>
  96.                 <TD id="3_3_c2">
  97.                     C2
  98.                 </TD>
  99.             </tr>
  100.         </table>
  101.     </body>
  102. </html>
复制代码


你说的那个功能不知道上面算不算实现了?
另外,我认为可以通过解析ID的方式,查找同列元素ID。因为表格是通过数据对象循环取出并输入到窗体的,也就是可以在ID的格式上进行自定义,然后使用脚本通过对这种格式进行解析,来达到显示同列元素ID的效果(比如说利用上面代码中的格式,然后使用正则表达式进行匹配)。
呵呵~~我是这么想的~ 不知道对你有帮助没。XD..

ps:上面的脚本函数moveCol()中的rows(XX)/cols(XX)都改成rows[XX]/cols[XX]了,否则在FF下不兼容~~

[ 本帖最后由 徐志摩 于 2008-3-25 02:07 编辑 ]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

  • 6 关注
  • 13 粉丝
  • 398 帖子
 

天健社区APP