http://fason.nease.net/上有个例子.
基本就是利用innerHTML属性来完成.
基本就是利用innerHTML属性来完成.
解决方案 »
- http://nssug.baidu.com/su?wd=123&prod=superpage得不到数据
- JS代码使地区子类直接显示在地区父类下面
- jquery往table里添加<tr>
- 如何检测某软件是否安装?
- ext combobox 下拉列表中加入“增加”功能
- <span>的内容是[OBJECT],不解
- 可不可以使一段JavaScript代码在加载div时执行?
- 怎样使用js在table里添加tr和td
- 简单的脚本控制样式表的问题???
- iframe中表格动态问题?
- 如何根据输入的字符数动态设置HTML中Input表单的宽度?
- 加上if(cNode.getAttribute("Text")=="总工办")这句为什么会出错呢?我是想让树控件根据指定的Text如"总工办"使它的结点Checked为True
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD><BODY><table id="theTable" border=1>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>11</td>
<td>12</td>
</tr>
<tr>
<td>13</td>
<td>14</td>
<td>15</td>
</tr>
<tr>
<td>13</td>
<td>17</td>
<td>18</td>
</tr>
<tr>
<td>13</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</table><input type="button" value="合并第一列重复行" onclick="MergeCellsVertical(theTable, 0)">
<input type="button" value="合并第二列重复行" onclick="MergeCellsVertical(theTable, 1)">
<input type="button" value="合并第三列重复行" onclick="MergeCellsVertical(theTable, 2)"><script>
// 合并某一列相同的行
function MergeCellsVertical(tbl, cellIndex)
{
if (tbl.rows.length < 2) return;
var i, j;
var last = tbl.rows(0).cells(cellIndex).innerHTML;
var lastIndex = 0;
for (i = 1; i < tbl.rows.length; i++)
{
if (tbl.rows(i).cells(cellIndex).innerHTML != last) // 发现新的值
{
if (i > lastIndex + 1)
{
for (j = lastIndex + 1; j < i; j++)
{
tbl.rows(j).cells(cellIndex).removeNode();
}
tbl.rows(lastIndex).cells(cellIndex).rowSpan = i - lastIndex;
}
last = tbl.rows(i).cells(cellIndex).innerHTML;
lastIndex = i;
}
}
// 最后一行要特别处理
if (lastIndex != tbl.rows.length - 1)
{
for (j = lastIndex + 1; j < tbl.rows.length; j++)
{
tbl.rows(j).cells(cellIndex).removeNode();
}
tbl.rows(lastIndex).cells(cellIndex).rowSpan = tbl.rows.length - lastIndex + 1;
}
}
</script></BODY>
</HTML>
==============================
<table border="1" width="100%" id=tab1 onmousedown=tabStart() onmouseup=tabEnd()>
<tr>
<td width="25%">111</td>
<td width="25%">111</td>
<td width="25%"> </td>
<td width="25%"> </td>
</tr>
<tr>
<td width="25%">222</td>
<td width="25%"> </td>
<td width="25%"> </td>
<td width="25%"> </td>
</tr>
<tr>
<td width="25%"> </td>
<td width="25%"> </td>
<td width="25%"> </td>
<td width="25%"> </td>
</tr>
</table>
<p>从第<input type="text" name="col1" size="4">列到第<input type="text" name="col2" size="4">列
从第<input type="text" name="row1" size="4">行到第<input type="text" name="row2" size="4">行<input type="button" value="合并" onclick=doTab()></p>
<script>
function doTab(){
x1=col1.value-1;
x2=col2.value-1;
y1=row1.value-1;
y2=row2.value-1;
if (x1==x2 && y1==y2) return;
htmlstr="";
xspan=0;
yspan=0;
for (i=x1;i<=x2;i++) xspan+=tab1.rows[y1].cells[i].colSpan;
for (i=y1;i<=y2;i++) yspan+=tab1.rows[i].cells[x1].rowSpan;
for (i=y1;i<=y2;i++) {
htmlstr+="<br>";
for(j=x1;j<=x2;j++){
htmlstr+=tab1.rows[i].cells[j].innerHTML;
}
}
htmlstr=htmlstr.substr(4);
for (i=y1;i<=y2;i++){
j=x1;
while (j<x2){
tab1.rows[i].deleteCell(x1);
j++;
}
tab1.rows[i].cells[x1].colSpan=xspan;
}
for (i=y2;i>y1;i--){
tab1.rows[i].deleteCell(x1);
}
tab1.rows[y1].cells[x1].rowSpan=yspan;
tab1.rows[y1].cells[x1].innerHTML=htmlstr;
//alert(htmlstr);
}
function tabStart(){
obj=window.event.srcElement;
col1.value=obj.cellIndex+1;
col2.value=col1.value;
row1.value=obj.parentElement.rowIndex+1;
row2.value=row1.value;
}
function tabEnd(){
obj=window.event.srcElement;
col2.value=obj.cellIndex+1;
row2.value=obj.parentElement.rowIndex+1;
}
</script>
那个在线编辑器还可以,但操作不方便。而且没代码。另外在拆分单元格时有Bug.To awaysrain(绝对零度):你提供的代码正是我梦寐以求的。在简单方正的表格中进行测试完全没有问题。
但遗憾的是,在存在复杂的colSpan及rowSpan的表格中进行测试。该算法无法完成跨行的合并。
在完成跨列的单元格合并后,也未对影响范围内的其它单元格的rowSpan进行处理,这导致多次合并操作后表格错乱。
我自己的算法与该算法存在差不多相同的问题。
请各位大虾再提供些参考。感激不尽啊!