`
chenhua_1984
  • 浏览: 1251920 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

js操作html的table,包括添加行,添加列,删除行,删除列,合并单元格(未实现)

阅读更多

       记得以前面试的时候遇到过这样一个问题:有一个表格,然后有4个输入框,一个合并 按钮,输入框是这样的,从第几行到第几行,从第几列到第几列,然后点击按钮,合并 。当时我从学校出来,js知识只是知道一些,根本做不到!现在想想,其实这个问题也还是考基础功夫是否扎实!大家有兴趣可以自己做做看,测下自己是不是能够做出来。题目的截图:

 

第1/1列 第1/2列 第1/3列 第1/4列 第1/5列
第2/1列 第2/2列 第2/3列 第2/4列 第2/5列
第3/1列 第3/2列 第3/3列 第3/4列 第3/5列
第4/1列 第4/2列 第4/3列 第4/4列 第4/5列
第5/1列 第5/2列 第5/3列 第5/4列 第5/5列
第6/1列 第6/2列 第6/3列 第6/4列 第6/5列
第7/1列 第7/2列 第7/3列 第7/4列 第7/5列
第8/1列 第8/2列 第8/3列 第8/4列 第8/5列
第9/1列 第9/2列 第9/3列 第9/4列 第9/5列
从第 行到 行

从第 列到 列

 

     现在做这个问题,看起来简单,但我还是花了很长时间,可能是我的思路不对吧?主要就是用js来操作html,我现在实现了添加行,删除行,添加列,删除列 ,但合并单元格却不能完整的实现主要是表格会乱掉 。现在把这个问题发出来,有兴趣的同仁可以自己在有空的时候研究下,看自己能不能做出来!主要是合并单元格的问题!也可以帮我看看合并单元格的问题。

 我自己实现的部分代码:

html部分 写道
<body onLoad="init();">

<table id="table" align="center">
<tbody id="newbody"></tbody>

</table>
<div>
<table width="800px" border="1px" align="center">
  <tr><td align="center"><input type="button" id="addRow" name="addRow" onClick="addRow();" value="添加行"/></td>
    <td align="center"><input type="button" id="delRow" name="delRow" onClick="removeRow();" value="删除行"/></td>
  </tr>
  <tr><td align="center"><input type="button" id="delCell" name="delCell" onClick="removeCell();" value="删除列"/></td>
    <td align="center"><input type="button" id="addCell" name="addCell" onClick=" addCell();" value="添加列"/></td>
 </tr>
 <tr><td align="center" colspan="2"><input type="button" id="addRows" name="addRows" onClick="addRow_withInsert();" value="添加行"/></td></tr>
</table>
</div>
<div>
<table width="800px" border="1px" align="center">
   <tr><td>从第<input type="text" id="beginRow" name="beginRow" value=""/> 行到   <input type="text" name="endRow" id="endRow" value=""/> 行</td><td rowspan="2" id="test"><input type="button" name="hebing" id="hebing" value="合并" onClick="rebulid();"/> </td></tr>
  <tr><td>从第<input type="text" name="beginCol" id="beginCol" value=""/> 列到<input type="text" name="endCol" id="endCol" value=""/> 列</td></tr>
</table>
</div>
</body>
 
生成表格,采用appendChild 写道
function init(){
_table=document.getElementById ("table");
_table.border="1px";
_table.width="800px";

for(var i=1;i<10;i++){
  var row=document.createElement ("tr");
  row.id=i;
  for(var j=1;j<6;j++){
   var cell=document.createElement ("td");
   cell.id =i+"/"+j;
   cell.appendChild(document.createTextNode ("第"+cell.id+"列"));
   row.appendChild (cell);
  }
  document.getElementById("newbody").appendChild (row);
 }
}
 
添加行,使用appendChild方法 写道
function addRow(){
var length=document.getElementById("table").rows.length;
/*document.getElementById("newbody").insertRow(length);
  document.getElementById(length+1).setAttribute("id",length+2);*/
  var tr=document.createElement("tr");
  tr.id=length+1;
  var td=document.createElement("td");

  for(i=1;i<4;i++){
    td.id=tr.id+"/"+i;
    td.appendChild(document.createTextNode("第"+td.id+"列"));
    tr.appendChild(td);

  }

  document.getElementById("newbody").appendChild (tr);
}
 
添加行的另一种方法insertRow 写道
function addRow_withInsert(){
   varrow=document.getElementById("table").insertRow( document.getElementById("table").rows.length);
 var rowCount =document.getElementById("table").rows.length;

 var countCell=document.getElementById("table").rows.item(0).cells.length;
 for(var i=0;i<countCell;i++){
   var cell=row.insertCell(i);

   cell.innerHTML="新"+(rowCount)+"/"+(i+1)+"列";
   cell.id=(rowCount)+"/"+(i+1);

  }

}
 
删除行,采用deleteRow(row Index) 写道
/*删除行,采用deleteRow(row Index)*/
function removeRow(){
/* var row=document.getElementById("2");
  var index=row.rowIndex;
  alert(index);*/
   document.getElementById("newbody").deleteRow(document.getElementById(document.getElementById("table").rows.length).rowIndex);
}
 
添加列,采用insertCell(列位置)方法 写道
function addCell(){
/*document.getElementById("table").rows.item(0).cells.length
用来获得表格的列数
*/
for(var i=0;i<document.getElementById("table").rows.length;i++){
  var cell=document.getElementById("table").rows[i].insertCell(2);
  cell.innerHTML="第"+(i+1)+"/"+3+"列";

}

}
 
删除列,采用deleteCell(列位置)的方法 写道
/*删除列,采用deleteCell(列位置)的方法*/
function removeCell(){
  for(var i=0;i<document.getElementById("table").rows.length;i++){
    document.getElementById("table").rows[i].deleteCell(0);
  }
}
 
合并单元格(未实现) 写道
我的代码有问题,主要是表格会乱掉,一直没有改好
function rebulid(){
var beginRow=document.getElementById("beginRow").value;/*开始行*/
var endRow=document.getElementById("endRow").value;/*结束行*/

var beginCol=document.getElementById("beginCol").value;/*开始列*/
var endCol=document.getElementById("endCol").value;/*结束列*/

var tempCol=beginRow+"/"+beginCol;/*定位要改变属性的列*/
alert(tempCol);
var td=document.getElementById(tempCol);

/*删除要合并的单元格*/
for(var x=beginRow;x<=endRow;x++){
  for(var i=beginCol;i<=endCol;i++){
    if(x==beginRow){

      document.getElementById("table").rows[x].deleteCell(i+1);

    }
    else{

      document.getElementById("table").rows[x].deleteCell(i);

    }

   }
  }
   td.rowSpan=(endRow-beginRow)+1;
}
 

分享到:
评论
16 楼 chenhua_1984 2009-06-02  
  其实合并单元格的这个功能我没有能够实现,也许是思路有问题,大家谁做到了请给个解决的办法!谢谢!
15 楼 chenhua_1984 2009-06-02  
可维护型说的有道理,我在做这个的时候的确没有考虑这个问题!
14 楼 zbm2001 2009-06-02  
liujunsong 写道
zbm2001 写道
liujunsong 写道
这种东西将来维护的时候会死人的.

怎么讲?
是楼主做的有问题?还是这种功能的实现本身就存在弊端?

能不能说清楚一点


多说两句吧.
……


晕,你就直接说楼主的代码封装存在问题,将来维护的时候会死人的。

我还以为你对是否需要这种功能存有质疑。

13 楼 liujunsong 2009-06-02  
zbm2001 写道
liujunsong 写道
这种东西将来维护的时候会死人的.

怎么讲?
是楼主做的有问题?还是这种功能的实现本身就存在弊端?

能不能说清楚一点


多说两句吧.
我们在做软件开发的时候,脑子里面一定要有一个概念,就是说这个程序将来是需要有人维护的,而且这个人一般来说不会是开发者自己.所以在写程序的时候,一定要想想,自己写的是很爽,别人来维护这代码,是不是也很爽.
就说楼主写的这些功能吧,不错,确实实现了.
问题是,将来其他人维护的时候,是不是能够很容易上手看明白,很有把握的进行修改,升级呢?
上面这个问题的答案其实不难找,楼主可以在他们公司做个简单实验,随便找另外两个开发人员,然后看看能否用2天时间把这个事情完全移交出去.
为啥最多只能给两天时间呢,因为一个项目的代码是非常多的,如果仅仅一个功能点就要用两天才能掌握,那么掌握整个项目的时间就无穷无尽拖下去了...

在我自己的工作经验中,亲眼看到很多开发人员,写的东西别人看不懂,没法接手,最后要么自己被一个项目给困在那里不能动弹,要么一走了之以后这段代码就变成了死代码,没人看,没人管,最后被扔掉.

功能的实现仅仅是第一步,另外还要想想,这办法好吗,好用吗,以后能行吗?(仅仅是建议)
12 楼 huheng1234 2009-06-02  
确实以后再维护的时候,麻烦啊~~
11 楼 xzj127 2009-06-02  
用了几下。。感觉不是那么好。。很别扭。。

10 楼 zbm2001 2009-06-02  
liujunsong 写道
这种东西将来维护的时候会死人的.

怎么讲?
是楼主做的有问题?还是这种功能的实现本身就存在弊端?

能不能说清楚一点
9 楼 liujunsong 2009-06-02  
这种东西将来维护的时候会死人的.
8 楼 少女杀手 2009-05-07  
不错诶,在火狐上也能用!
7 楼 erlengleng 2009-05-05  
只实现了一部分,ie8下测试的
6 楼 chenhua_1984 2009-05-04  
如果哪位大哥对JS操作html合并单元格很熟悉的话,可以给一段实现的方式!谢谢
5 楼 chenhua_1984 2009-05-04  
mingyuan0824 写道
在上个项目中,我倒是做出了合并和拆分单元格,就是模仿EXCEL的功能。

是用js操作html吗?
4 楼 chenhua_1984 2009-05-04  
冯冀川 写道
表格用div实现吧,这些所有的功能实现会方便一些

大哥,表格用DIV实现是怎么说的?
3 楼 mingyuan0824 2009-05-03  
在上个项目中,我倒是做出了合并和拆分单元格,就是模仿EXCEL的功能。
2 楼 冯冀川 2009-05-03  
表格用div实现吧,这些所有的功能实现会方便一些
1 楼 chenhua_1984 2009-05-03  
大家有谁作出合并单元格的这个功能吗?

相关推荐

    JS 实现Table相同行的单元格自动合并示例代码

    需要注意的是,当自动合并单元格时,开发者应该考虑表格的可访问性和数据的逻辑性,确保合并操作不会导致数据解读错误或者损害表格结构的完整性。例如,如果一个表格是用于数据导出或者数据分析的,那么合并单元格...

    vue-easytable合并单元格

    在这个“vue-easytable合并单元格”的主题下,我们将深入探讨如何利用Vue Easytable实现表格中的单元格合并。 在传统的HTML表格中,合并单元格通常使用`&lt;td&gt;`的`colspan`和`rowspan`属性来完成,但在Vue Easytable...

    JS实现动态修改table及合并单元格的方法示例

    总的来说,JS实现动态修改table及合并单元格涉及的主要知识点包括: 1. DOM操作:通过`getElementById`获取元素,使用`rows`和`cells`属性遍历表格。 2. 遍历技巧:使用`for`循环遍历表格行和列,根据需求进行判断...

    layui table合并单元格.zip

    "layui table合并单元格.zip" 这个压缩包正是提供了关于如何在layui的表格中实现单元格合并的示例和资源。 首先,"layui table.txt" 文件可能包含了layui表格组件的基础用法和API介绍。layui的表格组件支持动态加载...

    原生JS实现HTML- TABLE 自动行合并插件

    类功能描述:该插件生成一个具有行合并的列表数据,合并例由开发者指定。 开发者提供已排序的数据列表以及需要合并行的列名即可,无需后端二次处理数据。 该类以纯原生JS编写,无需引入任何第三方库。 调用方法:...

    javascript万能table合并单元格,隐藏列 html版

    ### JavaScript 实现 HTML Table 单元格合并及隐藏列功能详解 #### 一、背景介绍 在处理 HTML 表格时,我们经常会遇到需要合并相同数据的单元格以及根据需求显示或隐藏某些列的情况。例如,在报表展示或者数据汇总...

    完美的table单元格合并js

    本js脚本完美的实现了table单元格的合并,合并后犹如交叉表的形式,非常完美,并在其中附带例子可以验证。

    table合并单元格的多种方法

    在表格(Table)设计中,有时我们需要合并单元格来达到特定的展示效果,例如创建标题行或列,或者为了美观和布局对齐。在HTML、CSS以及JavaScript中,都有多种方式可以实现单元格的合并。这里我们将详细探讨六种合并...

    JSP Table 单元格合并

    每次遍历时都会更新计数器 `count`,用于记录合并单元格所占据的行数。 ```javascript count++; ``` #### 三、JSP 示例代码解析 在 JSP 文件中,使用 `&lt;s:iterator&gt;` 标签来迭代列表,并为每个元素生成一个表格行...

    LayUiTable表单相同参数的单元格合并

    本话题聚焦于LayUI中的Table组件,特别是如何实现相同参数的单元格合并功能,这在展示数据时能有效提高信息的可读性和美观性。 LayUI Table的单元格合并功能,主要是通过`parseData`方法和自定义模板来实现的。当...

    将HtmlTable 导出为Execl文件,支持合并单元格、合并行,无需Office支持

    本项目提供了一个解决方案,它支持合并单元格和合并行,无需依赖Microsoft Office,这对于那些无法安装Office环境或者希望在服务器端执行此操作的用户来说,具有很高的实用价值。 首先,我们要理解HTML表格...

    table-rowspan表格自动合并单元格插件

    "table-rowspan表格自动合并单元格插件"是专为HTML表格设计的一种工具,它允许开发者通过简单的操作实现单元格的动态合并、添加和删除,极大地提升了用户界面的可读性和交互性。以下是对这个插件及相关知识点的详细...

    富文本编辑器以及表格操作,可拉伸单元格宽度、增加行、增加列、合并单元格

    用户可以选择多个单元格,然后执行“合并单元格”操作,以实现这一效果。 5. **其他表格操作**:除了上述基本功能,富文本编辑器可能还包括拆分单元格、调整行高、排序数据、设置边框样式和颜色等高级功能,以满足...

    列表多行多列合并单元格

    综上所述,实现列表多行多列合并单元格涉及到HTML表格的基本操作,以及JavaScript动态计算和设置`colspan`和`rowspan`属性。在开发过程中,还需要考虑交互性、响应式设计和性能优化,确保在各种环境下都能提供良好的...

    合并table的行

    本文将深入探讨如何实现“合并table的行”这一功能,以及其背后的原理与应用场景。 ### 合并table的行:原理与实现 在Web开发中,`&lt;table&gt;`元素用于显示数据的表格形式,而合并行的功能主要通过`&lt;td&gt;`或`&lt;th&gt;`标签...

    javascript操作table(增加/删除行/单元格)

    对表格的行和列进行插入/删除,并对每行添加行号

    javascript 万能table合并单元格 js版

    只要输入table的id,就可以自动合并单元格,只要上下相邻的单元格相同的,都会合并 html版比较好,点下面的 http://download.csdn.net/source/1276574

    jquery datatable 单元格合并

    通过Datatables的`drawCallback`或`initComplete`事件,在表格渲染完成后合并单元格。遍历预处理得到的合并信息,使用DOM操作修改表格结构。 ```javascript $('#example').DataTable({ // ...其他配置... ...

    利用js合并table相同内容单元格并js方式自动生成

    利用js合并table相同内容单元格并js方式自动生成,把文本内容复制进js中,应该就知道大概咋用了

    bootstrap-table导出合并单元格

    Bootstrap Table是一款基于...通过以上步骤,我们就能在使用Bootstrap Table时实现导出合并单元格的功能,提高数据展示的效率和质量。在实际开发中,可以根据项目需求调整和定制这些方法,以满足更复杂的需求。

Global site tag (gtag.js) - Google Analytics