javascript可以做到,在你的TD里放个TEXT框就可以修改数据了,你可以用STYLE把他设的看不出是个TEXT框.插入和删除行以前有人回答过这个问题,你可以查查

解决方案 »

  1.   

    <div contenteditable><table border=1><tr><td>aaaaaaaaaaa</td><td>bbbbbbbb</td></tr></table></div>
      

  2.   

    http://fason.nease.net/zhuanti/table/sort.htm
      

  3.   

    下面的代码里插入行,列,编辑单元格的函数都有,从代码里面粘过来的,你自己找吧<SCRIPT language="javascript">
    var NowInput,NowType,CanEdit;    
    CanEdit=true;
    function InsertCol()
    {
    if(!CanEdit)
    {
    alert("现在不能进行派生,请先设置和保存当前计算方法");
    return;
    }
    if(form1.Col.value==""||form1.Col.value==null)
    {
    return;
    }
    if(form1.Row.value==""||form1.Row.value==null)
    {
    return;
    }
    var x = form1.Col.value;
    var y = form1.Row.value;
    var C ;
    var StartX = form1.RowValue.value.split("|---|").length;
    var StartY = form1.ColValue.value.split("|---|").length;
    var TempNum = parseInt(tab1.rows[0].cells[x-1].innerHTML);
    var TempStr,TempArray;
    for(i=0;i<tab1.rows.length;i++)
    {
    C = tab1.rows[i].insertCell(x);
    C.noWrap = "noWrap";
    C.bgColor = "#E4F2F3"; if(i<StartY)
    {
    C.innerHTML =tab1.rows[i].cells[x-1].innerHTML ;  
    if(i>0)
    {
    C.setAttribute("id","Cell" + i + (x-1));
    C.attachEvent("ondblclick",new Function('editCell(Cell' + i + (x-1) + ')'));
    }
    }
    else if(i==StartY)
    {
    C.innerHTML = '<input type="text" id="Text1' + i + (x-1) + '" style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" ONBLUR="setCell1(this.parentElement, this)">';
    C.setAttribute("id","Cell" + i + (x-1));
    C.attachEvent("ondblclick",new Function('editCell(Cell' + i + (x-1) + ')'));
    eval("form1.Text1" + i + (x-1)).focus();
    eval("form1.Text1" + i + (x-1)).select();
    }
    else if(i==StartY+1)
    {
    C.innerHTML = '<input type="text" id="Text1' + i + (x-1) + '" style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" onkeydown="setCell2(this.parentElement, this)"  onfocus="CursorToLast()">';
    C.setAttribute("id","Cell" + i + (x-1));
    C.attachEvent("ondblclick",new Function('editCell1(Cell' + i + (x-1) + ')'));
    NowInput = eval("form1.Text1" + i + (x-1));
    NowType = "COL";
    CanEdit = false;
    }
    else
    {
    C.innerHTML = "&nbsp;"
    }
    }
    for(i=x;i<tab1.rows[0].cells.length;i++)
    {
    TempNum++;
    tab1.rows[0].cells[i].innerHTML = TempNum;
    tab1.rows[0].cells[i].setAttribute("align","center");
    tab1.rows[0].cells[i].bgColor = tab1.rows[0].cells[x-1].bgColor;
    }
    tab1.rows[0].cells[x].attachEvent("ondblclick",SetColNum);
    //记录添加的列号
    TempArray = form1.AddedCol.value.split(",")
    TempStr = "";
    for(i=0;i<TempArray.length;i++)
    {
    if(parseInt(TempArray[i])>=parseInt(x))
    {
    TempArray[i] = parseInt(TempArray[i]) + 1;
    }
    if(TempStr =="")
    {
    TempStr = TempArray[i]; 
    }
    else
    {
    TempStr = TempStr + "," + TempArray[i]; 
    }
    }
    form1.AddedCol.value = TempStr;
    if((form1.AddedCol.value=="")||(form1.AddedCol.value==null))
    {
    form1.AddedCol.value = x;
    }
    else
    {
    form1.AddedCol.value = form1.AddedCol.value + "," + x;
    }
    }//----------------------------------------------------------------------------------
      

  4.   

    function InsertRow()
    {
    if(!CanEdit)
    {
    alert("现在不能进行派生,请先设置和保存当前计算方法");
    return;
    }
    if(form1.Col.value==""||form1.Col.value==null)
    {
    return;
    }
    if(form1.Row.value==""||form1.Row.value==null)
    {
    return;
    }
    var x = form1.Col.value;
    var y = form1.Row.value;
    var R = tab1.insertRow(y); 
    var C ;
    var StartX = form1.RowValue.value.split("|---|").length;
    var StartY = form1.ColValue.value.split("|---|").length;
    var TempNum = parseInt(tab1.rows[y-1].cells[0].innerHTML);
    var TempStr,TempArray;
    for(i=0;i<tab1.rows[y-1].cells.length;i++)
    {
    C = R.insertCell(i);
    C.noWrap="noWrap";
    C.bgColor = "#EAF4E3";
    if(i<StartX)
    {
    C.innerHTML = tab1.rows[y-1].cells[i].innerHTML;
    if(i>0)
    {
    C.setAttribute("id","Cell" + (y-1) + i);
    C.attachEvent("ondblclick",new Function('editCell(Cell' + (y-1) + i + ')'));
    }
    }
    else if(i==StartX)
    {
    C.innerHTML = '<input type="text" id="Text1' +(y-1) + i +'" style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" ONBLUR="setCell1(this.parentElement, this)">';
    C.setAttribute("id","Cell" + (y-1) + i);
    C.attachEvent("ondblclick",new Function('editCell(Cell' + (y-1) + i + ')'));
    eval("form1.Text1" + (y-1) + i).focus();
    eval("form1.Text1" + (y-1) + i).select();
    }
    else if(i==StartX+1)
    {
    C.innerHTML = '<input type="text" id="Text1' +(y-1) + i +'" style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" onkeydown="setCell2(this.parentElement, this)"  onfocus="CursorToLast()">';
    C.setAttribute("id","Cell" + (y-1) + i);
    C.attachEvent("ondblclick",new Function('editCell1(Cell' + (y-1) + i + ')'));
    NowInput = eval("form1.Text1" + (y-1) + i);
    NowType = "ROW";
    CanEdit = false;
    }
    else
    {
    C.innerHTML = "&nbsp;"
    }
    }
    for(i=y;i<tab1.rows.length;i++)
    {
    TempNum++;
    tab1.rows[i].cells[0].innerHTML = TempNum;
    tab1.rows[i].cells[0].setAttribute("align","center");
    tab1.rows[i].cells[0].bgColor = tab1.rows[y-1].cells[0].bgColor;
    }
    tab1.rows[y].cells[0].attachEvent("ondblclick",SetRowNum);
    //记录添加的列号
    TempArray = form1.AddedRow.value.split(",")
    TempStr = "";
    for(i=0;i<TempArray.length;i++)
    {
    if(parseInt(TempArray[i])>=parseInt(y))
    {
    TempArray[i] = parseInt(TempArray[i]) + 1;
    }
    if(TempStr =="")
    {
    TempStr = TempArray[i]; 
    }
    else
    {
    TempStr = TempStr + "," + TempArray[i]; 
    }
    }
    form1.AddedRow.value = TempStr;
    if((form1.AddedRow.value=="")||(form1.AddedRow.value==null))
    {
    form1.AddedRow.value = y;
    }
    else
    {
    form1.AddedRow.value = form1.AddedRow.value + "," + y;
    }
    }
    function DeleteRow()
    {
    var x = form1.Col.value;
    var y = form1.Row.value;
    //alert(form1.AddedRow.value);
    //alert(y);
    var tempStr1=","+form1.AddedRow.value + ",";
    if(tempStr1.lastIndexOf(y-1)<0)
    {
    alert("本行不是您添加的,不能删除");
    return;
    }
    tab1.rows[y-1].bgColor = "blue" ;
    if(confirm("您将删除本行,是否继续?"))
    {
    tab1.deleteRow(y-1);
    for(i=y-1;i<tab1.rows.length;i++)
    {
    tab1.rows[i].cells[0].innerText = parseInt(tab1.rows[i].cells[0].innerText)-1;
    }
    var tempArray = form1.AddedRow.value.split(",");
    var tempStr = "";
    for (i=0;i<tempArray.length;i++)
    {
    if(tempArray[i]==y-1)
    {
    continue;
    }
    if(tempArray[i]>y)
    {
    tempArray[i] = parseInt(tempArray[i])-1;
    }
    if (tempStr=="")
    {
    tempStr = tempArray[i]
    }
    else
    {
    tempStr = tempStr + "," + tempArray[i]
    }
    }
    form1.AddedRow.value = tempStr;
    CanEdit=true;
    }
    else
    {
    tab1.rows[y-1].bgColor = "" ;
    }

    }
    function DeleteCol()
    {
    var x = form1.Col.value;
    var y = form1.Row.value;
    //alert(x + "," + y);
    var tempStr1=","+form1.AddedCol.value + ",";
    if(tempStr1.lastIndexOf(x-1)<0) //检查是否为派生得列,不是的话不能删除
    {
    alert("本列不是您添加的,不能删除");
    return;
    }
    for (i=1;i<tab1.rows.length;i++) //设置选中的颜色
    {
    tab1.rows[i].cells[x-1].bgColor = "blue" ;
    }
    //alert(form1.AddedCol.value);
    if(confirm("您将删除本列,是否继续?")) //提示用户确认
    {
    for (i=0;i<tab1.rows.length;i++) //开始删除
    {
    tab1.rows[i].deleteCell(x-1);
    }
    for(i=x-1;i<tab1.rows[0].cells.length;i++) //修改列号
    {
    tab1.rows[0].cells[i].innerText = parseInt(tab1.rows[0].cells[i].innerText)-1;
    }

    var tempArray = form1.AddedCol.value.split(","); //删除用户添加的列号记录并重新调整
    var tempStr = "";
    for (i=0;i<tempArray.length;i++)
    {
    if(tempArray[i]==x-1)
    {
    continue;
    }
    if(tempArray[i]>x)
    {
    tempArray[i] = parseInt(tempArray[i])-1;
    }
    if (tempStr=="")
    {
    tempStr = tempArray[i]
    }
    else
    {
    tempStr = tempStr + "," + tempArray[i]
    }
    }
    form1.AddedCol.value = tempStr;
    CanEdit=true;

    }
    else
    {
    for (i=1;i<tab1.rows.length;i++)
    {
    tab1.rows[i].cells[x-1].bgColor = "";
    }
    }
    }function tabSelect(){  
        obj=window.event.srcElement;  
    form1.Col.value=obj.cellIndex+1;  
        form1.Row.value=obj.parentElement.rowIndex+1;          
    }//==================================================================================
    //==================================================================================
    function editCell (cell) {
    if(!CanEdit)
    {
    alert("单元格现在不能编辑,请先设置和保存当前计算方法");
    return;
    }
    OldUnit = cell.innerText;
        obj=window.event.srcElement;  
    if (document.all) {
     cell.innerHTML = '<INPUT ID="editCell"  style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" ONCLICK="event.cancelBubble = true;" ONCHANGE="setCell(this.parentElement, this)"  ONBLUR="setCell(this.parentElement, this)" VALUE="' + cell.innerText + '" SIZE="' + (cell.innerText.length) + '">';
     document.all.editCell.focus();
     document.all.editCell.select();
     }
    else if (document.getElementById) {
     cell.normalize();
     var input = document.createElement('INPUT');
     input.setAttribute('value', cell.firstChild.nodeValue);
     input.setAttribute('size', cell.firstChild.nodeValue.length);
     input.onchange = function (evt) { 
     setCell(this.parentNode, this.value); };
     input.onclick = function (evt) { 
     evt.cancelBubble = true;
     if (evt.stopPropagation)
            evt.stopPropagation();
     };
    cell.replaceChild(input, cell.firstChild);
    input.focus();
    input.select();
    }
    }
    //----------------------------------------------------------------------------------
      

  5.   

    function editCell1 (cell) {
    //计算方法单元格的编辑函数
    if(!CanEdit)
    {
    alert("单元格现在不能编辑,请先设置和保存当前计算方法");
    return;
    }
    if (document.all) {
     cell.innerHTML = '<INPUT ID="editCell"  style="border: 1 solid #FFFFFF; padding: 0; HEIGHT: 13px;font-size: 13px" ONCLICK="event.cancelBubble = true;" ONCHANGE="setCell2(this.parentElement, this)"  onkeydown="setCell2(this.parentElement, this)"  onfocus="CursorToLast()" VALUE="' + cell.innerText + '">';
     document.all.editCell.focus();
     document.all.editCell.select();
     }
    else if (document.getElementById) {
     cell.normalize();
     var input = document.createElement('INPUT');
     input.setAttribute('value', cell.firstChild.nodeValue);
     input.setAttribute('size', cell.firstChild.nodeValue.length);
     input.onchange = function (evt) { 
     setCell(this.parentNode, this.value); };
     input.onclick = function (evt) { 
     evt.cancelBubble = true;
     if (evt.stopPropagation)
      evt.stopPropagation();
     };
    cell.replaceChild(input, cell.firstChild);
    input.focus();
    input.select();
    }
    NowInput = eval("form1." + "editCell");
    CanEdit = false;
    }//----------------------------------------------------------------------------------
    function setCell (cell, Ipt) 
    {
    var value=
     Ipt.value;if(value==""||value==null)
    {
    alert("请输入派生名称");
    Ipt.focus();
    Ipt.select();
    return;
    }
    if (document.all)
    {
    cell.innerText = value;
    }
    else if (document.getElementById)
    {
    cell.replaceChild(document.createTextNode(value), cell.firstChild);
    }
    //NowInput.focus();
    }
    //----------------------------------------------------------------------------------
    function setCell1 (cell, Ipt) 
    {
    //派生的最后一个指标的设置,并使计算方法获得焦点
    var value=
     Ipt.value;if(value==""||value==null)
    {
    alert("请输入派生名称");
    Ipt.focus();
    Ipt.select();
    return;
    }
    if (document.all)
    {
    cell.innerText = value;
    }
    else if (document.getElementById)
    {
    cell.replaceChild(document.createTextNode(value), cell.firstChild);
    }
    NowInput.focus();
    }
    //----------------------------------------------------------------------------------
    function setCell2 (cell, Ipt) 
    {
    //计算方法,回车保存
    var gk=event.keyCode;
        if (gk==13) 
        {
        event.keyCode=9; 
    var value=
     Ipt.value;if(value==""||value==null)
    {
    alert("请输入计算方法");
    Ipt.focus();
    Ipt.select();
    return;
    }
    if (document.all)
    {
    cell.innerText = value;
    }
    else if (document.getElementById)
    {
    cell.replaceChild(document.createTextNode(value), cell.firstChild);
    }
    CanEdit = true;
    }
    //NowInput.focus();
    }//==================================================================================
    //==================================================================================function SetRowNum()
    {
    if((NowType == "ROW")||(NowInput.id=="editCell"))
    {
        obj=window.event.srcElement;  
    var Col = obj.cellIndex+1;  
    var Row= obj.parentElement.rowIndex+1; 
        var Str = 
    tab1.rows[Row-1].cells[Col-1].innerHTML;if((NowInput.value!="")&&(NowInput.value!=null))
    {
    NowInput.value =NowInput.value + Str;
    }
    else
    {
    NowInput.value =Str;
    }
    NowInput.focus();
    }
    }
    function SetColNum()
    {
    //alert("aa");
    if((NowType == "COL")||(NowInput.id=="editCell"))
    {
        obj=window.event.srcElement;  
    var Col = obj.cellIndex+1;  
        var Row= obj.parentElement.rowIndex+1; 
        var Str = tab1.rows[Row-1].cells[Col-1].innerHTML;
        if((NowInput.value!="")&&(NowInput.value!=null))
        {
    NowInput.value =NowInput.value + Str;
    }
    else
    {
    NowInput.value =Str;
    }
    NowInput.focus();
    }
    }
    function CursorToLast()
    {
    //使光标移到最后
      var e = event.srcElement;
      var r =e.createTextRange();
      r.moveStart('character',e.value.length);
      r.collapse(true);
      r.select();
    }
    function SaveAdded()
    {
    //保存
    var AddedRow = form1.AddedRow.value;
    var AddedCol = form1.AddedCol.value;
    var TempStr,TempArray;
    var DataStartCol,DataStarRow
    var RowUnit = "";
    var RowCalCulate = "";
    var ColUnit = "";
    var ColCalCulate = "";
    var aaa;
    DataStarRow = parseInt(form1.StartRow.value)+2;
    DataStartCol = parseInt(form1.StartCol.value)+2;
    //alert(DataStarRow +","+ DataStartCol);
    //保存行
    //return;
    if((AddedRow !="")&&(AddedRow != null))
    {
    TempArray = AddedRow.split(","); 
    TempArray = OrderBy(TempArray);
    for(i=0;i<TempArray.length;i++)
    {
    TempStr =""
    for(j=0;j<tab1.rows[TempArray[i]].cells.length;j++)
    {
    if(j==0)
    {
    continue;
    }
    if(j<DataStartCol)
    {
    TempStr = TempStr + "|" + tab1.rows[TempArray[i]].cells[j].innerText;
    }
    else
    {
    if((tab1.rows[TempArray[i]].cells[j].innerText!=" ")&&(tab1.rows[TempArray[i]].cells[j].innerText!=null))
    {
    if(RowCalCulate!="")
    {
    RowCalCulate = RowCalCulate + "@" + "ROW[" + TempArray[i] +"]:" +tab1.rows[TempArray[i]].cells[j].innerText;
    }
    else
    {
    RowCalCulate = "ROW[" + TempArray[i] +"]:" +tab1.rows[TempArray[i]].cells[j].innerText;
    }
    }
    }
    }
    if(TempStr !="")
    {
    TempStr = TempStr.substr(1);
    }
    TempStr = "ROW[" + TempArray[i] + "]:" + TempStr;
    if(RowUnit!="")
    {
    RowUnit = RowUnit + "@" + TempStr; 
    }
    else
    {
    RowUnit = TempStr; 
    }
    }
    //alert(RowUnit + "    " + RowCalCulate);
    parent.form1.AddedRowUnit.value = RowUnit;
    parent.form1.RowCalCulate.value = RowCalCulate;
    }
    //保存列
    if((AddedCol != "")&&(AddedCol != null))
    {
    TempArray = AddedCol.split(","); 
    TempArray = OrderBy(TempArray);
    for(i=0;i<TempArray.length;i++)
    {
    TempStr =""
    for(j=0;j<tab1.rows.length;j++)
    {
    if(j==0)
    {
    continue;
    }
    if(j<DataStarRow)
    {
    TempStr = TempStr + "|" + tab1.rows[j].cells[TempArray[i]].innerText;
    }
    else
    {
    if((tab1.rows[j].cells[TempArray[i]].innerText!=" ")&&(tab1.rows[j].cells[TempArray[i]].innerText!=null))
    {
    if(ColCalCulate!="")
    {
    ColCalCulate = ColCalCulate + "@" + "COL[" + TempArray[i] +"]:" + tab1.rows[j].cells[TempArray[i]].innerText;
    }
    else
    {
    ColCalCulate = "COL[" + TempArray[i] +"]:" + tab1.rows[j].cells[TempArray[i]].innerText;
    }
    }
    }
    }
    if(TempStr !="")
    {
    TempStr = TempStr.substr(1);
    }
    TempStr = "COL[" + TempArray[i] + "]:" + TempStr;
    if(ColUnit!="")
    {
    ColUnit = ColUnit + "@" + TempStr; 
    }
    else
    {
    ColUnit = TempStr; 
    }
    }
    // alert(ColUnit + "     " + ColCalCulate);
    parent.form1.AddedColUnit.value = ColUnit;
    parent.form1.ColCalCulate.value = ColCalCulate;
    }
    parent.form1.submit();
    }
    function OrderBy(SourceArray)
    {
    var temparray = SourceArray;
    var t,p,i,j;
    for(i=0;i<temparray.length;i++)
    {
    p = i;
    for(j=i;j<temparray.length;j++)
    {
    if(parseInt(temparray[j])<parseInt(temparray[p]))
    {
    p = j;
    }
    }
    t = temparray[i];
    temparray[i] = temparray[p];
    temparray[p] = t;
    }
    return temparray;
    }
    function NotSave()
    {
    //parent.Layer1.style.visibility='hidden';
    parent.document.all.ps.width=0;
    parent.document.all.ps.height=0;
    parent.ShowTable.style.visibility='visible';
    parent.document.body.style.overflow='auto'; parent.form1.AddedRowUnit.value = "";
    parent.form1.RowCalCulate.value = "";
    parent.form1.AddedColUnit.value = "";
    parent.form1.ColCalCulate.value = "";

    function CalculateCell()
    {
    Cell.style.visibility='visible';
    //Cell.innerHTML="<TEXTAREA style='WIDTH: 200px; HEIGHT: 200px' name=TEXTAREA1 rows=10 cols=23></TEXTAREA>";
    }
    //==================================================================================
    //==================================================================================
    </script>