一个对表格进行控制的js
来源:互联网 发布:php专家系统 编辑:程序博客网 时间:2024/04/30 09:59
var TableOperator=...{
inputtext:null,//用于修改当前所选单元格的内容
div:null,//拖动时候显示的div
beginX:0,//拖动的起始位置
beginY:0,
ChangeInfo:new Array(),
dtable:null,//当前操作的表
dstart:false,//是否已经开始拖动了
seletedCells:new Array(),
startSelect:function()//开始选择单元格
...{
if (event.button==1)
...{
if(!TableOperator.div)
...{
TableOperator.div=document.createElement("div");
TableOperator.div.style.position="absolute";
TableOperator.div.style.fontSize="0px";
}
TableOperator.div.style.width= 0 ;
TableOperator.div.style.height= 0;
TableOperator.div.style.left=event.clientX;
TableOperator.div.style.top=event.clientY;
TableOperator.div.className="divStyle";
TableOperator.beginX=event.clientX;
TableOperator.beginY=event.clientY;
document.body.appendChild(TableOperator.div);
TableOperator.div.style.zIndex=300;
TableOperator.div.onmouseup=TableOperator.endSelect;
if(!TableOperator.dstart)
...{
TableOperator.dstart=true;
TableOperator.seletedCells.length=0;
TableOperator.seletedCells[0]=event.srcElement;
}
}
},
Selecting:function()//拖动
...{
if(TableOperator.dstart)
...{
TableOperator.div.style.width=Math.abs( event.clientX-TableOperator.beginX) ;
TableOperator.div.style.height=Math.abs( event.clientY-TableOperator.beginY) ;
if(event.clientY-TableOperator.beginY<0)
TableOperator.div.style.top = event.clientY ;
if(event.clientX-TableOperator.beginX<0)
TableOperator.div.style.left = event.clientX ;
if(!TableOperator.IfElementInArray( event.srcElement)&& event.srcElement.tagName=="TD" )
TableOperator.seletedCells[TableOperator.seletedCells.length]=event.srcElement;
}
} ,
endSelect:function()//确定选择
...{
TableOperator.seletedCells.length=0;
if(TableOperator.dstart)
...{
TableOperator.div.removeNode(true);
TableOperator.dstart=false;
var objDiv=TableOperator.ObjInfo(TableOperator.div)
for( i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objTD=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if (objTD.top<objDiv.bottom && objTD.bottom>objDiv.top && objTD.left<objDiv.right && objTD.right>objDiv.left)
...{
TableOperator.seletedCells[TableOperator.seletedCells.length]=TableOperator.dtable.cells[i];
TableOperator.dtable.cells[i].className="selectedCell";
}
else
...{
TableOperator.dtable.cells[i].className="";
}
}
}
TableOperator.ChangeInfo[TableOperator.ChangeInfo.length]= TableOperator.dtable ;
},
ObjInfo:function(o)//获得单元格或者当前选择框的信息
...{
var obj=new Object;
if(o.tagName=="DIV")
...{
obj.left=parseInt(TableOperator.div.style.left);
obj.right= parseInt(TableOperator.div.style.left)+parseInt(TableOperator.div.style.width);
obj.top= parseInt(TableOperator.div.style.top);
obj.bottom= parseInt(TableOperator.div.style.top)+parseInt(TableOperator.div.style.height);
}
else if(o.tagName=="TD")
...{
obj.left=obj.right=obj.top=obj.bottom=0;
obj.cellIndex=o.cellIndex;
obj.rowIndex=o.parentNode.rowIndex;
obj.rowSpan=o.rowSpan;
obj.colSpan=o.colSpan;
var twidth=o.offsetWidth;
var theight=o.offsetHeight;
while(o!=document.body)...{
obj.left+=o.offsetLeft;
obj.top+=o.offsetTop;
o=o.offsetParent;
}
obj.right=obj.left+twidth;
obj.bottom=obj.top+theight;
}
else if(o.tagName=="TABLE")
...{
var colLength=0;
var rowLength=0;
for (var i=0;i< o.rows[0].cells.length;i++)
colLength+=o.rows[0].cells[i].colSpan;
var rowLength=o.rows.length;
obj.cols=colLength ;
obj.rows=rowLength ;
}
return obj;
},
IfElementInArray:function(o)
...{
for (var i=0;i<TableOperator.seletedCells.length;i++)
...{
if (o==TableOperator.seletedCells[i])
return true;
}
return false;
},
Split:function(IsColSplit,crucell,num)//开始拆分单元格 isColSplit true :按照列方向拆分 false:按行方向拆粉 ,crucell 当前拆分的格子,num 拆分的数目
...{
if(!num)
num=2;
if(!crucell)
crucell=TableOperator.seletedCells[0];
if(!crucell)
return ;
var currentCell=crucell;
for (var i=1;i<num;i++)
...{
currentCell= TableOperator.SplitCell(IsColSplit,crucell);
}
},
SplitCell:function(IsColSplit,crucell)//拆分单元格
...{
var cell;
//插入单元格的
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
// cell.className="selectedCell";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
var arrayCell=new Array();
var selectCell=crucell;
var CellInfo=TableOperator.ObjInfo(selectCell) ;
if(IsColSplit)//拆分列
...{
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objInfo=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((objInfo.left<=CellInfo.left) && (objInfo.right>CellInfo.left))
...{
arrayCell[arrayCell.length]=TableOperator.dtable.cells[i];
}
}
if(selectCell.colSpan==1)
...{
for (var i=0;i<arrayCell.length;i++)
...{
if (arrayCell[i]!=selectCell)
arrayCell[i].colSpan =arrayCell[i].colSpan+1;
}
}
else
...{
cell.colSpan=selectCell.colSpan-1;
selectCell.colSpan=1;
}
cell.rowSpan=selectCell.rowSpan;
selectCell.insertAdjacentElement("AfterEnd", cell);
}
else//拆分行
...{
//要插入新单元格所在的行
var row;
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objInfo=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((objInfo.top<=CellInfo.top) && (objInfo.bottom>CellInfo.top))
...{
arrayCell[arrayCell.length]=TableOperator.dtable.cells[i];
}
}
cell.colSpan=selectCell.colSpan;
if(selectCell.rowSpan==1)
...{
for (var i=0;i<arrayCell.length;i++)
...{
if (arrayCell[i]!=selectCell)
arrayCell[i].rowSpan =arrayCell[i].rowSpan+1;
}
row=document.createElement("TR")
selectCell.parentNode.insertAdjacentElement("afterEnd", row);
row.insertAdjacentElement("afterBegin", cell);
}
else
...{
var CellsInTheRow=new Array();
row =TableOperator.dtable.rows[selectCell.parentNode.rowIndex+1];
//寻找下一行,当前插入cell位置前一个cell或者后一个cell
var cellBefore ,cellAfter;
for (CellsIndex=0;CellsIndex<row.cells.length;CellsIndex++)
...{
var rowCellInfo=TableOperator.ObjInfo(row.cells[CellsIndex]);
if (rowCellInfo.left>CellInfo.left)
...{
cellAfter=row.cells[CellsIndex];
cellBefore =null;
break;
}
else
...{
cellBefore=row.cells[CellsIndex];
cellAfter =null;
}
}
cell.rowSpan=selectCell.rowSpan-1;
selectCell.rowSpan=1;
if (cellAfter)
cellAfter.insertAdjacentElement("beforeBegin", cell);
else if (cellBefore)
cellBefore.insertAdjacentElement("afterEnd", cell);
else
row.appendChild(cell);
}
// cell.cellIndex=TableOperator.seletedCells[0].cellIndex;
// row.appendChild(cell);
}
// TableOperator.seletedCells[TableOperator.seletedCells.length]=cell;
return cell;
},
UnitCell:function()//合并单元格
...{
var top,btop;
var bottom,bbottom;
var left,bleft;
var right,bright;
var obj;
if(!(TableOperator.seletedCells.length<=1))
...{
obj=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
top=obj.top;
bottom=obj.bottom;
left=obj.left;
right=obj.right;
btop=true;
bbottom=true;
bleft=true;
bright=true;
for(var i=1;i<TableOperator.seletedCells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.seletedCells[i]);
if (!(top==obj1.top))
btop=false;
if (!(bottom==obj1.bottom))
bbottom=false;
if (!(left==obj1.left))
bleft=false;
if(!(right==obj1.right))
bright=false;
}
if( (btop && bbottom) && !(bright && bleft))//合并列
...{
var colSpan=0;
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
colSpan+=TableOperator.seletedCells[i].colSpan;
if( i!=0)
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells[0].colSpan=colSpan;
var minColSpan=0;
//解除合并之后的colSpan 的冗余
var unitCellInfo=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
var CellsInline =new Array();
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((obj1.left<=unitCellInfo.left) && (obj1.right>unitCellInfo.left))
...{
CellsInline[CellsInline.length]=TableOperator.dtable.cells[i];
if ( minColSpan ==0)
...{
minColSpan=obj1.colSpan;
}
else
...{
minColSpan=Math.min(obj1.colSpan,minColSpan)
}
}
}
// alert(minColSpan);
for (var i=0 ;i<CellsInline.length;i++)
...{
CellsInline[i].colSpan= CellsInline[i].colSpan-minColSpan +1;
}
}
if( !(btop && bbottom) && (bright && bleft))
...{
var rowSpan=0;
for(i=0;i<TableOperator.seletedCells.length;i++)
...{
rowSpan+=TableOperator.seletedCells[i].rowSpan;
if( i!=0)
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells[0].rowSpan=rowSpan;
//解除合并之后的rowSpan 的冗余
var minRowSpan=0;
var minRowDif=0;
var unitCellInfo=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
var CellsInline =new Array();
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ( (obj1.top<=unitCellInfo.top) && (obj1.bottom>unitCellInfo.top))
...{
CellsInline[CellsInline.length]=TableOperator.dtable.cells[i];
if ( minRowSpan==0)
...{
minRowSpan=TableOperator.dtable.cells[i].rowSpan;
}
else
...{
minRowSpan=Math.min(TableOperator.dtable.cells[i].rowSpan,minRowSpan)
}
var mindif=Math.min(Math.abs( unitCellInfo.rowIndex+unitCellInfo.rowSpan-obj1.rowIndex),Math.abs( obj1.rowIndex+obj1.rowSpan-unitCellInfo.rowIndex));
if (minRowDif==0)
...{
minRowDif= mindif;
}
else
...{
minRowDif=Math.min(minRowDif,mindif);
}
}
}
// alert(minRowSpan);
if ( CellsInline.length==1)
CellsInline[0].rowSpan=1;
else
...{
for (var i=0 ;i<CellsInline.length;i++)
...{
CellsInline[i].rowSpan= CellsInline[i].rowSpan- Math.min( minRowSpan,minRowDif)+1 ;
}
}
//删除没有cell的行
for(var i=TableOperator.dtable.rows.length-1;i>0;i--)
...{
if (TableOperator.dtable.rows[i].cells.length==0)
TableOperator.dtable.rows[i].removeNode(true);
}
}
TableOperator.seletedCells.length=1;
}
},
insertRow:function()
...{ if(TableOperator.dtable)
...{
var colLength=0;
for (var i=0;i< TableOperator.dtable.rows[0].cells.length;i++)
colLength+=TableOperator.dtable.rows[0].cells[i].colSpan;
var row= TableOperator.dtable.insertRow(-1)
var cell=document.createElement("TD")
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
cell.colSpan=colLength;
row.insertAdjacentElement("afterBegin",cell);
}
},
insertCol:function()
...{
if(TableOperator.dtable)
...{
var rowLength=TableOperator.dtable.rows.length;
var cell=document.createElement("TD")
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
cell.rowSpan=rowLength;
TableOperator.dtable.rows[0].insertAdjacentElement("beforeEnd",cell);
}
},
delCells:function ()//删除选定的行或者列
...{
var top,btop;
var bottom,bbottom;
var left,bleft;
var right,bright;
var obj;
if(!(TableOperator.seletedCells.length<1))
...{
obj=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
top=obj.top;
bottom=obj.bottom;
left=obj.left;
right=obj.right;
btop=true;
bbottom=true;
bleft=true;
bright=true;
var tableInfo=TableOperator.ObjInfo(TableOperator.dtable);
for(var i=1;i<TableOperator.seletedCells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.seletedCells[i]);
if (!(top==obj1.top))
btop=false;
if (!(bottom==obj1.bottom))
bbottom=false;
if (!(left==obj1.left))
bleft=false;
if(!(right==obj1.right))
bright=false;
}
if( (btop && bbottom) )//删除一行
...{
var colSpan=0;
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
colSpan+=TableOperator.seletedCells[i].colSpan;
}
if(colSpan==tableInfo.cols)
...{
TableOperator.seletedCells[0].parentElement.removeNode(true);
TableOperator.seletedCells.length=0;
}
else
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].innerHtml=" ";
}
}
}
if( (bright && bleft)&& TableOperator.seletedCells.length>0)
...{
var rowSpan=0;
for(i=0;i<TableOperator.seletedCells.length;i++)
...{
rowSpan+=TableOperator.seletedCells[i].rowSpan;
}
if (rowSpan==tableInfo.rows)
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells.length=0;
}
else
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].innerHtml=" ";
}
}
}
}
if (TableOperator.dtable.cells.length<=0)
...{
TableOperator.dtable.removeNode(true);
TableOperator.dtable=null;
}
}
,
Init:function(tableName)
...{
var table= document.getElementById(tableName);
TableOperator.dtable=table;
for(var i=0;i<table.cells.length;i++)
...{
table.cells[i].onmousedown=TableOperator.startSelect;
table.cells[i].onmousemove=TableOperator.Selecting;
table.cells[i].onmouseup=TableOperator.endSelect;
table.cells[i].onselectstart="return:false";
// table.cells[i].onclick=TableOperator.endSelect;
}
}
}
inputtext:null,//用于修改当前所选单元格的内容
div:null,//拖动时候显示的div
beginX:0,//拖动的起始位置
beginY:0,
ChangeInfo:new Array(),
dtable:null,//当前操作的表
dstart:false,//是否已经开始拖动了
seletedCells:new Array(),
startSelect:function()//开始选择单元格
...{
if (event.button==1)
...{
if(!TableOperator.div)
...{
TableOperator.div=document.createElement("div");
TableOperator.div.style.position="absolute";
TableOperator.div.style.fontSize="0px";
}
TableOperator.div.style.width= 0 ;
TableOperator.div.style.height= 0;
TableOperator.div.style.left=event.clientX;
TableOperator.div.style.top=event.clientY;
TableOperator.div.className="divStyle";
TableOperator.beginX=event.clientX;
TableOperator.beginY=event.clientY;
document.body.appendChild(TableOperator.div);
TableOperator.div.style.zIndex=300;
TableOperator.div.onmouseup=TableOperator.endSelect;
if(!TableOperator.dstart)
...{
TableOperator.dstart=true;
TableOperator.seletedCells.length=0;
TableOperator.seletedCells[0]=event.srcElement;
}
}
},
Selecting:function()//拖动
...{
if(TableOperator.dstart)
...{
TableOperator.div.style.width=Math.abs( event.clientX-TableOperator.beginX) ;
TableOperator.div.style.height=Math.abs( event.clientY-TableOperator.beginY) ;
if(event.clientY-TableOperator.beginY<0)
TableOperator.div.style.top = event.clientY ;
if(event.clientX-TableOperator.beginX<0)
TableOperator.div.style.left = event.clientX ;
if(!TableOperator.IfElementInArray( event.srcElement)&& event.srcElement.tagName=="TD" )
TableOperator.seletedCells[TableOperator.seletedCells.length]=event.srcElement;
}
} ,
endSelect:function()//确定选择
...{
TableOperator.seletedCells.length=0;
if(TableOperator.dstart)
...{
TableOperator.div.removeNode(true);
TableOperator.dstart=false;
var objDiv=TableOperator.ObjInfo(TableOperator.div)
for( i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objTD=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if (objTD.top<objDiv.bottom && objTD.bottom>objDiv.top && objTD.left<objDiv.right && objTD.right>objDiv.left)
...{
TableOperator.seletedCells[TableOperator.seletedCells.length]=TableOperator.dtable.cells[i];
TableOperator.dtable.cells[i].className="selectedCell";
}
else
...{
TableOperator.dtable.cells[i].className="";
}
}
}
TableOperator.ChangeInfo[TableOperator.ChangeInfo.length]= TableOperator.dtable ;
},
ObjInfo:function(o)//获得单元格或者当前选择框的信息
...{
var obj=new Object;
if(o.tagName=="DIV")
...{
obj.left=parseInt(TableOperator.div.style.left);
obj.right= parseInt(TableOperator.div.style.left)+parseInt(TableOperator.div.style.width);
obj.top= parseInt(TableOperator.div.style.top);
obj.bottom= parseInt(TableOperator.div.style.top)+parseInt(TableOperator.div.style.height);
}
else if(o.tagName=="TD")
...{
obj.left=obj.right=obj.top=obj.bottom=0;
obj.cellIndex=o.cellIndex;
obj.rowIndex=o.parentNode.rowIndex;
obj.rowSpan=o.rowSpan;
obj.colSpan=o.colSpan;
var twidth=o.offsetWidth;
var theight=o.offsetHeight;
while(o!=document.body)...{
obj.left+=o.offsetLeft;
obj.top+=o.offsetTop;
o=o.offsetParent;
}
obj.right=obj.left+twidth;
obj.bottom=obj.top+theight;
}
else if(o.tagName=="TABLE")
...{
var colLength=0;
var rowLength=0;
for (var i=0;i< o.rows[0].cells.length;i++)
colLength+=o.rows[0].cells[i].colSpan;
var rowLength=o.rows.length;
obj.cols=colLength ;
obj.rows=rowLength ;
}
return obj;
},
IfElementInArray:function(o)
...{
for (var i=0;i<TableOperator.seletedCells.length;i++)
...{
if (o==TableOperator.seletedCells[i])
return true;
}
return false;
},
Split:function(IsColSplit,crucell,num)//开始拆分单元格 isColSplit true :按照列方向拆分 false:按行方向拆粉 ,crucell 当前拆分的格子,num 拆分的数目
...{
if(!num)
num=2;
if(!crucell)
crucell=TableOperator.seletedCells[0];
if(!crucell)
return ;
var currentCell=crucell;
for (var i=1;i<num;i++)
...{
currentCell= TableOperator.SplitCell(IsColSplit,crucell);
}
},
SplitCell:function(IsColSplit,crucell)//拆分单元格
...{
var cell;
//插入单元格的
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
// cell.className="selectedCell";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
var arrayCell=new Array();
var selectCell=crucell;
var CellInfo=TableOperator.ObjInfo(selectCell) ;
if(IsColSplit)//拆分列
...{
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objInfo=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((objInfo.left<=CellInfo.left) && (objInfo.right>CellInfo.left))
...{
arrayCell[arrayCell.length]=TableOperator.dtable.cells[i];
}
}
if(selectCell.colSpan==1)
...{
for (var i=0;i<arrayCell.length;i++)
...{
if (arrayCell[i]!=selectCell)
arrayCell[i].colSpan =arrayCell[i].colSpan+1;
}
}
else
...{
cell.colSpan=selectCell.colSpan-1;
selectCell.colSpan=1;
}
cell.rowSpan=selectCell.rowSpan;
selectCell.insertAdjacentElement("AfterEnd", cell);
}
else//拆分行
...{
//要插入新单元格所在的行
var row;
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var objInfo=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((objInfo.top<=CellInfo.top) && (objInfo.bottom>CellInfo.top))
...{
arrayCell[arrayCell.length]=TableOperator.dtable.cells[i];
}
}
cell.colSpan=selectCell.colSpan;
if(selectCell.rowSpan==1)
...{
for (var i=0;i<arrayCell.length;i++)
...{
if (arrayCell[i]!=selectCell)
arrayCell[i].rowSpan =arrayCell[i].rowSpan+1;
}
row=document.createElement("TR")
selectCell.parentNode.insertAdjacentElement("afterEnd", row);
row.insertAdjacentElement("afterBegin", cell);
}
else
...{
var CellsInTheRow=new Array();
row =TableOperator.dtable.rows[selectCell.parentNode.rowIndex+1];
//寻找下一行,当前插入cell位置前一个cell或者后一个cell
var cellBefore ,cellAfter;
for (CellsIndex=0;CellsIndex<row.cells.length;CellsIndex++)
...{
var rowCellInfo=TableOperator.ObjInfo(row.cells[CellsIndex]);
if (rowCellInfo.left>CellInfo.left)
...{
cellAfter=row.cells[CellsIndex];
cellBefore =null;
break;
}
else
...{
cellBefore=row.cells[CellsIndex];
cellAfter =null;
}
}
cell.rowSpan=selectCell.rowSpan-1;
selectCell.rowSpan=1;
if (cellAfter)
cellAfter.insertAdjacentElement("beforeBegin", cell);
else if (cellBefore)
cellBefore.insertAdjacentElement("afterEnd", cell);
else
row.appendChild(cell);
}
// cell.cellIndex=TableOperator.seletedCells[0].cellIndex;
// row.appendChild(cell);
}
// TableOperator.seletedCells[TableOperator.seletedCells.length]=cell;
return cell;
},
UnitCell:function()//合并单元格
...{
var top,btop;
var bottom,bbottom;
var left,bleft;
var right,bright;
var obj;
if(!(TableOperator.seletedCells.length<=1))
...{
obj=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
top=obj.top;
bottom=obj.bottom;
left=obj.left;
right=obj.right;
btop=true;
bbottom=true;
bleft=true;
bright=true;
for(var i=1;i<TableOperator.seletedCells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.seletedCells[i]);
if (!(top==obj1.top))
btop=false;
if (!(bottom==obj1.bottom))
bbottom=false;
if (!(left==obj1.left))
bleft=false;
if(!(right==obj1.right))
bright=false;
}
if( (btop && bbottom) && !(bright && bleft))//合并列
...{
var colSpan=0;
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
colSpan+=TableOperator.seletedCells[i].colSpan;
if( i!=0)
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells[0].colSpan=colSpan;
var minColSpan=0;
//解除合并之后的colSpan 的冗余
var unitCellInfo=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
var CellsInline =new Array();
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ((obj1.left<=unitCellInfo.left) && (obj1.right>unitCellInfo.left))
...{
CellsInline[CellsInline.length]=TableOperator.dtable.cells[i];
if ( minColSpan ==0)
...{
minColSpan=obj1.colSpan;
}
else
...{
minColSpan=Math.min(obj1.colSpan,minColSpan)
}
}
}
// alert(minColSpan);
for (var i=0 ;i<CellsInline.length;i++)
...{
CellsInline[i].colSpan= CellsInline[i].colSpan-minColSpan +1;
}
}
if( !(btop && bbottom) && (bright && bleft))
...{
var rowSpan=0;
for(i=0;i<TableOperator.seletedCells.length;i++)
...{
rowSpan+=TableOperator.seletedCells[i].rowSpan;
if( i!=0)
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells[0].rowSpan=rowSpan;
//解除合并之后的rowSpan 的冗余
var minRowSpan=0;
var minRowDif=0;
var unitCellInfo=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
var CellsInline =new Array();
for(var i=0;i<TableOperator.dtable.cells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.dtable.cells[i]);
if ( (obj1.top<=unitCellInfo.top) && (obj1.bottom>unitCellInfo.top))
...{
CellsInline[CellsInline.length]=TableOperator.dtable.cells[i];
if ( minRowSpan==0)
...{
minRowSpan=TableOperator.dtable.cells[i].rowSpan;
}
else
...{
minRowSpan=Math.min(TableOperator.dtable.cells[i].rowSpan,minRowSpan)
}
var mindif=Math.min(Math.abs( unitCellInfo.rowIndex+unitCellInfo.rowSpan-obj1.rowIndex),Math.abs( obj1.rowIndex+obj1.rowSpan-unitCellInfo.rowIndex));
if (minRowDif==0)
...{
minRowDif= mindif;
}
else
...{
minRowDif=Math.min(minRowDif,mindif);
}
}
}
// alert(minRowSpan);
if ( CellsInline.length==1)
CellsInline[0].rowSpan=1;
else
...{
for (var i=0 ;i<CellsInline.length;i++)
...{
CellsInline[i].rowSpan= CellsInline[i].rowSpan- Math.min( minRowSpan,minRowDif)+1 ;
}
}
//删除没有cell的行
for(var i=TableOperator.dtable.rows.length-1;i>0;i--)
...{
if (TableOperator.dtable.rows[i].cells.length==0)
TableOperator.dtable.rows[i].removeNode(true);
}
}
TableOperator.seletedCells.length=1;
}
},
insertRow:function()
...{ if(TableOperator.dtable)
...{
var colLength=0;
for (var i=0;i< TableOperator.dtable.rows[0].cells.length;i++)
colLength+=TableOperator.dtable.rows[0].cells[i].colSpan;
var row= TableOperator.dtable.insertRow(-1)
var cell=document.createElement("TD")
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
cell.colSpan=colLength;
row.insertAdjacentElement("afterBegin",cell);
}
},
insertCol:function()
...{
if(TableOperator.dtable)
...{
var rowLength=TableOperator.dtable.rows.length;
var cell=document.createElement("TD")
cell=document.createElement("TD")
cell.onmousedown=TableOperator.startSelect;
cell.innerHTML=" ";
cell.onmousemove=TableOperator.Selecting;
cell.onmouseup=TableOperator.endSelect;
cell.onselectstart="return:false";
cell.rowSpan=rowLength;
TableOperator.dtable.rows[0].insertAdjacentElement("beforeEnd",cell);
}
},
delCells:function ()//删除选定的行或者列
...{
var top,btop;
var bottom,bbottom;
var left,bleft;
var right,bright;
var obj;
if(!(TableOperator.seletedCells.length<1))
...{
obj=TableOperator.ObjInfo(TableOperator.seletedCells[0]);
top=obj.top;
bottom=obj.bottom;
left=obj.left;
right=obj.right;
btop=true;
bbottom=true;
bleft=true;
bright=true;
var tableInfo=TableOperator.ObjInfo(TableOperator.dtable);
for(var i=1;i<TableOperator.seletedCells.length;i++)
...{
var obj1=TableOperator.ObjInfo(TableOperator.seletedCells[i]);
if (!(top==obj1.top))
btop=false;
if (!(bottom==obj1.bottom))
bbottom=false;
if (!(left==obj1.left))
bleft=false;
if(!(right==obj1.right))
bright=false;
}
if( (btop && bbottom) )//删除一行
...{
var colSpan=0;
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
colSpan+=TableOperator.seletedCells[i].colSpan;
}
if(colSpan==tableInfo.cols)
...{
TableOperator.seletedCells[0].parentElement.removeNode(true);
TableOperator.seletedCells.length=0;
}
else
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].innerHtml=" ";
}
}
}
if( (bright && bleft)&& TableOperator.seletedCells.length>0)
...{
var rowSpan=0;
for(i=0;i<TableOperator.seletedCells.length;i++)
...{
rowSpan+=TableOperator.seletedCells[i].rowSpan;
}
if (rowSpan==tableInfo.rows)
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].removeNode(true);
}
TableOperator.seletedCells.length=0;
}
else
...{
for(var i=0;i<TableOperator.seletedCells.length;i++)
...{
TableOperator.seletedCells[i].innerHtml=" ";
}
}
}
}
if (TableOperator.dtable.cells.length<=0)
...{
TableOperator.dtable.removeNode(true);
TableOperator.dtable=null;
}
}
,
Init:function(tableName)
...{
var table= document.getElementById(tableName);
TableOperator.dtable=table;
for(var i=0;i<table.cells.length;i++)
...{
table.cells[i].onmousedown=TableOperator.startSelect;
table.cells[i].onmousemove=TableOperator.Selecting;
table.cells[i].onmouseup=TableOperator.endSelect;
table.cells[i].onselectstart="return:false";
// table.cells[i].onclick=TableOperator.endSelect;
}
}
}
TableOperator.js
在页面加载完毕之后调用(TableTest为要操作的表的id )
TableOperator.Init("TableTest");
调用相应的函数就可以对表格进行操作了
使用鼠标选择要操作的表格
如TableOperator.insertRow();
- 一个对表格进行控制的js
- Js版本的打老鼠游戏--这里简单用一个图标表示老鼠 关键字:js对表格进行动态创建
- javascript对表格的控制
- js 对表格进行各种操作
- 使用js对表格进行汇总
- js 对表格进行各种操作
- 用sorttable.js对表格进行排序
- Angular JS 之对表格进行操作
- 一个对计算机进行控制的类(c#)
- js对表格的排序
- 使用原生js+jquery 对加载好的表格进行部分列的合并
- C#对Excel表格样式的控制
- 对表格按日期或数字或字母进行排序的js
- 通过js去对表格的列,根据其内容进行排序(升序或者降序)
- 一个对表格进行拖拽来交换单元格数据的脚本^_^
- 【转载】js 对表格进行各种操作(转)
- 前端纯js对表格进行快速排序,统计
- 用JS控制表格的交替颜色
- P6Spy & SQL Profiler & IronTrack SQL
- 鼠标放在一个连接上,会显示图片(类似tooltip)
- javaScript高级应用(一)
- bjam,别弄乱了链接顺序!
- XMLSpy编辑工具中设置XML的DTD/XSD校验指向本地,而不要直接指向网络去
- 一个对表格进行控制的js
- Eclipse Jetty JettyLauncher 问题解决与使用技巧
- J2EE读书笔记,概念摘要1 servlet basic
- 章11 易用性测试
- 一个不会生育的男人
- john carmark的话!
- ntfs分区iis故障的解决
- Vim(vi) 与 SQL*Plus 集成以及AnySQL尝鲜
- Windows XP下Eclipse+CDT+MinGW+wxWidgets Setup (转载)