- 浏览: 1251920 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
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>
<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>
<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>
<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);
}
}
_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);
}
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);
}
}
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);
}
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+"列";
}
}
/*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 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;
}
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;
}
- 动态生成table.rar (1.6 KB)
- 下载次数: 3021
评论
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
大家有谁作出合并单元格的这个功能吗?
发表评论
-
web页面调用window.print()函数实现打印的功能
2010-09-17 09:23 151621 在WEB上的打印通常的解决方法是用报表的方式,比较 ... -
jquery 排序插件 tablesorter
2010-09-06 09:19 4609分页的插件有很多,项目里面用的是jquery, ... -
正则表达式基础学习六:匹配字母和数字和下划线
2010-08-12 10:34 3802\w 匹配 ... -
正则表达式基础学习五:匹配数字
2010-08-12 10:11 13421 匹配数字:[0-9]是[012345 ... -
正则表达式学习基础四:空白元字符
2010-08-12 10:01 1372元字符有 .匹配任 ... -
正则表达式学习基础三:使用元字符.[]
2010-08-11 16:37 1273元字符是 regex里有特殊含义的字符,使用的时候 ... -
正则表达式学习基础二
2010-08-10 17:27 861主要学习[ ]集合的用法和取非。截图如下,备忘。- ... -
正则表达式基础学习一
2010-08-10 17:02 976在看正则表达式的东西。比较基础的一节课,接几个图贴下,备忘。 ... -
左边菜单隐藏,右边全屏
2010-01-06 17:12 2443<html> <head> ... -
setTimeout 和 setInterval 的区别
2009-12-14 09:58 1151window对象有两个主要的定时方法,分别是setTimeou ... -
js+html类似QQ右下角弹出提示的效果
2009-12-14 09:53 3376js部分 <script type="tex ... -
jquery jmpopups 弹出新窗口,可以弹多个
2009-12-11 11:07 7326<!DOCTYPE html PUBLIC " ... -
Jquery Ingrid 表格插件的使用
2009-12-02 09:35 3320demo.jsp <%@ page language= ... -
html关闭“双击输入框出现提示”这个问题
2009-10-30 10:42 2502一般我们在填写网站得 注册或登录的时候,第 ... -
ajax学习笔记之一
2009-10-29 16:00 1131Aajax概述 0 ... -
firefox3不能获得html file的全路径的问题
2009-06-09 16:27 7923遇到这个问题以后, ... -
js添加一个新行,可以输入的Input,用于添加更多的业务
2009-06-09 09:59 4795<input type="butto ... -
获得select的innerText的值,在fireFox和IE里,Opera
2009-06-08 12:25 1208A 在IE里获得select的innerText的值用obj ... -
innerHTML IE bug未知的错误
2009-06-08 09:27 2119项目里要用到添加更 ... -
CSS样式学习笔记之五:表格的学习和表格的样式
2009-05-21 10:13 13831表格特有的元素:caption 和summary < ...
相关推荐
需要注意的是,当自动合并单元格时,开发者应该考虑表格的可访问性和数据的逻辑性,确保合并操作不会导致数据解读错误或者损害表格结构的完整性。例如,如果一个表格是用于数据导出或者数据分析的,那么合并单元格...
在这个“vue-easytable合并单元格”的主题下,我们将深入探讨如何利用Vue Easytable实现表格中的单元格合并。 在传统的HTML表格中,合并单元格通常使用`<td>`的`colspan`和`rowspan`属性来完成,但在Vue Easytable...
总的来说,JS实现动态修改table及合并单元格涉及的主要知识点包括: 1. DOM操作:通过`getElementById`获取元素,使用`rows`和`cells`属性遍历表格。 2. 遍历技巧:使用`for`循环遍历表格行和列,根据需求进行判断...
"layui table合并单元格.zip" 这个压缩包正是提供了关于如何在layui的表格中实现单元格合并的示例和资源。 首先,"layui table.txt" 文件可能包含了layui表格组件的基础用法和API介绍。layui的表格组件支持动态加载...
类功能描述:该插件生成一个具有行合并的列表数据,合并例由开发者指定。 开发者提供已排序的数据列表以及需要合并行的列名即可,无需后端二次处理数据。 该类以纯原生JS编写,无需引入任何第三方库。 调用方法:...
### JavaScript 实现 HTML Table 单元格合并及隐藏列功能详解 #### 一、背景介绍 在处理 HTML 表格时,我们经常会遇到需要合并相同数据的单元格以及根据需求显示或隐藏某些列的情况。例如,在报表展示或者数据汇总...
本js脚本完美的实现了table单元格的合并,合并后犹如交叉表的形式,非常完美,并在其中附带例子可以验证。
在表格(Table)设计中,有时我们需要合并单元格来达到特定的展示效果,例如创建标题行或列,或者为了美观和布局对齐。在HTML、CSS以及JavaScript中,都有多种方式可以实现单元格的合并。这里我们将详细探讨六种合并...
每次遍历时都会更新计数器 `count`,用于记录合并单元格所占据的行数。 ```javascript count++; ``` #### 三、JSP 示例代码解析 在 JSP 文件中,使用 `<s:iterator>` 标签来迭代列表,并为每个元素生成一个表格行...
本话题聚焦于LayUI中的Table组件,特别是如何实现相同参数的单元格合并功能,这在展示数据时能有效提高信息的可读性和美观性。 LayUI Table的单元格合并功能,主要是通过`parseData`方法和自定义模板来实现的。当...
本项目提供了一个解决方案,它支持合并单元格和合并行,无需依赖Microsoft Office,这对于那些无法安装Office环境或者希望在服务器端执行此操作的用户来说,具有很高的实用价值。 首先,我们要理解HTML表格...
"table-rowspan表格自动合并单元格插件"是专为HTML表格设计的一种工具,它允许开发者通过简单的操作实现单元格的动态合并、添加和删除,极大地提升了用户界面的可读性和交互性。以下是对这个插件及相关知识点的详细...
用户可以选择多个单元格,然后执行“合并单元格”操作,以实现这一效果。 5. **其他表格操作**:除了上述基本功能,富文本编辑器可能还包括拆分单元格、调整行高、排序数据、设置边框样式和颜色等高级功能,以满足...
综上所述,实现列表多行多列合并单元格涉及到HTML表格的基本操作,以及JavaScript动态计算和设置`colspan`和`rowspan`属性。在开发过程中,还需要考虑交互性、响应式设计和性能优化,确保在各种环境下都能提供良好的...
本文将深入探讨如何实现“合并table的行”这一功能,以及其背后的原理与应用场景。 ### 合并table的行:原理与实现 在Web开发中,`<table>`元素用于显示数据的表格形式,而合并行的功能主要通过`<td>`或`<th>`标签...
对表格的行和列进行插入/删除,并对每行添加行号
只要输入table的id,就可以自动合并单元格,只要上下相邻的单元格相同的,都会合并 html版比较好,点下面的 http://download.csdn.net/source/1276574
通过Datatables的`drawCallback`或`initComplete`事件,在表格渲染完成后合并单元格。遍历预处理得到的合并信息,使用DOM操作修改表格结构。 ```javascript $('#example').DataTable({ // ...其他配置... ...
利用js合并table相同内容单元格并js方式自动生成,把文本内容复制进js中,应该就知道大概咋用了
Bootstrap Table是一款基于...通过以上步骤,我们就能在使用Bootstrap Table时实现导出合并单元格的功能,提高数据展示的效率和质量。在实际开发中,可以根据项目需求调整和定制这些方法,以满足更复杂的需求。