62,046
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;_charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<div id="ab">
<table width="200" border="1" cellspacing="0" id="tb1" align="left" style="border: solid 1px;">
<tr id="c">
<td colspan=2 rowspan=3> </td>
<td colspan=2 rowspan=2> </td>
<td colspan=2 rowspan=2> </td>
<td> </td>
<td> </td>
</tr>
<tr id="b">
<td> </td><td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table></div>
行:<input id = "rows" value="2"/> 列:<input id = "cols" value="2"/>
<script>
function document.onclick(){
var a,b,c,d,rowNum,cellNum,cellNumP,tempCellNum1,tempCellNum2,maxCell,tempRows,y;
var e=window.event.srcElement;
maxCell = 0; //最大列数
rowNum=parseInt(document.getElementById("rows").value); //要求合并的行数
cellNum=parseInt(document.getElementById("cols").value); //要求合并的列数
if (rowNum==0||cellNum==0)
{
return;
}
cellNumP=0; //用来保存鼠标点击的行所占列数
if(e.tagName=="TD"){
a=e.parentElement.rowIndex;
b=e.cellIndex;
//得到表格的最大列数
for (var i=0; i < e.parentElement.parentElement.rows[0].cells.length; i++) {
maxCell = maxCell + parseInt(e.parentElement.parentElement.rows[0].cells[i].colSpan);
}
for (var i=0; i < e.parentElement.rowIndex; i++) {
y=0;
for (var j=0; j<e.parentElement.parentElement.rows[i].cells.length; j++)
{
if (e.parentElement.rowIndex-i>=parseInt(e.parentElement.parentElement.rows[i].cells[j].rowSpan))
{
y=y+parseInt(e.parentElement.parentElement.rows[i].cells[j].colSpan);
}
if (y<=b)
{
if (e.parentElement.rowIndex-i<parseInt(e.parentElement.parentElement.rows[i].cells[j].rowSpan))
{
cellNumP=cellNumP+parseInt(e.parentElement.parentElement.rows[i].cells[j].colSpan);
}
}
}
}
for (var i=0; i<e.cellIndex; i++)
{
cellNumP=cellNumP+parseInt(e.parentElement.parentElement.rows[e.parentElement.rowIndex].cells[i].colSpan);
}
if((e.parentElement.parentElement.rows.length-e.parentElement.rowIndex)<rowNum||(maxCell-cellNumP)<cellNum){
alert( "超出行数或者超出列数。" );
return;
}
//将rowspan>1的进行 行 拆分
for (var i=e.parentElement.rowIndex; i < e.parentElement.parentElement.rows.length; i++) {
tempCellNum2=cellNum;
for (var j=e.cellIndex; j < e.parentElement.parentElement.rows[i].cells.length; j++) {
if (tempCellNum2>0)
{
tempCellNum2 = tempCellNum2 - parseInt(e.parentElement.parentElement.rows[i].cells[j].colSpan);
if (parseInt(e.parentElement.parentElement.rows[i].cells[j].rowSpan)>1)
{
e.parentElement.parentElement.rows[i+1].cells[j].colSpan=e.parentElement.parentElement.rows[i].cells[j].colSpan;
AddCol(e.parentElement.parentElement.rows[i+1]);
}
if (parseInt(e.parentElement.parentElement.rows[i].cells[j].rowSpan)>1)
{
e.parentElement.parentElement.rows[i+1].cells[j].rowSpan=parseInt(e.parentElement.parentElement.rows[i].cells[j].rowSpan)-1+"";
e.parentElement.parentElement.rows[i].cells[j].rowSpan="1";
}
}
}
}
//如果要合并的列等于表格的最大列数,则直接添加一空行,并删除合并行数一下的行
if (maxCell==cellNum)
{
AddRow(e.parentElement.parentElement,e.parentElement.rowIndex+rowNum,cellNum);
tempRows=e.parentElement.rowIndex
for (i=tempRows+rowNum-1; i>=tempRows; i--)
{
e.parentElement.parentElement.parentElement.deleteRow(i);
}
return;
}
//将colspan>1的进行 列 拆分
for (var i=e.parentElement.rowIndex; i < e.parentElement.parentElement.rows.length; i++) {
tempCellNum1=cellNum;
for (var j=e.cellIndex; j < e.parentElement.parentElement.rows[i].cells.length; j++) {
if (parseInt(e.parentElement.parentElement.rows[i].cells[j].colSpan)>1)
{
for (c=parseInt(e.parentElement.parentElement.rows[i].cells[j].colSpan);c>1 ; c-- )
{
if (tempCellNum1>0)
{
e.parentElement.parentElement.rows[i].insertCell(j+1);
e.parentElement.parentElement.rows[i].cells[j+1].innerHTML=" ";
}
}
}
tempCellNum1 = tempCellNum1 - 1;
if (tempCellNum1>=0)
{
e.parentElement.parentElement.rows[i].cells[j].colSpan="1";
}
}
}
//合并
//删掉除了鼠标点击以外的单元格
for (var i=e.parentElement.rowIndex; i < e.parentElement.rowIndex+rowNum; i++) {
for (var j=e.cellIndex; j < e.cellIndex+cellNum; j++) {
if(a==i&&b==j){
//
}
else{
if(e.cellIndex+1<e.parentElement.parentElement.rows[i].cells.length){
e.parentElement.parentElement.rows[i].deleteCell(e.cellIndex+1);
}
}
}
}
//将鼠标点击的单元格的colspan和rowspan属性设置为要求合并的数
e.colSpan=cellNum+"";
e.rowSpan=rowNum+"";
}
}
function AddCol(obj)
{
var col=document.createElement("td");
obj.appendChild(col);
col.innerHTML=" ";
}
function AddRow(obj,rowNum,cellNum)
{
obj.insertRow(rowNum);
obj.rows[rowNum].insertCell(0);
obj.rows[rowNum].cells[0].colSpan=cellNum+"";
obj.rows[rowNum].cells[0].innerHTML=" ";
}
function chk(num){
return num?num%2?"奇数":"偶数":"0"
}
</script>
</body>
</html>