<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <script>
  function editcell(obj){
if(obj.innerText==""){
obj.innerHTML = "<input value='' onblur='update(this.value)'>";
}else{
obj.innerHTML = "<input value="+obj.innerText+" onblur='update(this.value)'>";
}

  }  function update(txt){
document.getElementById('td2').innerText = txt;
  }
 </script>
 </HEAD> <BODY>
 <TABLE border='1'>
 <TR>
<TD id="td2" onDblclick="editcell(this)">111</TD>
 </TR>
 </TABLE>
 </BODY>
</HTML>
简单的效果

解决方案 »

  1.   


    <head>
    <STYLE>
    .td1 { color: white;  background-color: orange;}
    .td2 { color: white;  background-color: #0099ff;}
    .td3 { color: white;  background-color: #336699;}
    </STYLE>
    <SCRIPT>
    function editCell (cell) {
    if (document.all) {
    cell.innerHTML = '<INPUT ID="editCell"  ONCLICK="event.cancelBubble = true;"  ONCHANGE="setCell(this.parentElement, this.value)"  ONBLUR="setCell(this.parentElement, this.value)" 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();
    }
    }function setCell (cell, value) {
    if (document.all)cell.innerText = value;
    else if (document.getElementById)cell.replaceChild(document.createTextNode(value), cell.firstChild);
    }
    </SCRIPT>
    </HEAD>
    <BODY>
    <TABLE BORDER="2">
    <TR>
    <TD ONCLICK="editCell(this);" CLASS="td1">欢迎光临</TD>
    <TD ONCLICK="editCell(this);" CLASS="td2">[孟宪会之精彩世界]</TD>
    <TD ONCLICK="editCell(this);" CLASS="td3">http://lucky.myrice.com</TD>
    </TR>
    </TABLE>
    </body>
    </HTML>孟子的编辑
      

  2.   

    <script>
    var NowTr,PreTr;
    document.ondblclick=function(e)
    {
      e=e||event;
      PreTr=NowTr;
      var tag=e.srcElement||e.target;
      if(tag.tagName=="TR")
        NowTr=tag;
      else if(tag.tagName=="TD")
        NowTr=tag.parentNode;
      else{ Update(NowTr,"1");NowTr=null;return;}
      if(NowTr!=PreTr)
      {
        if(PreTr)Update(PreTr,"1");
        Update(NowTr);
      }
    }
    function Update(NowTr,Type)
    {
      for(var i=0;i<NowTr.cells.length;i++)
      {
        NowTr.cells[i].innerHTML=Type=="1"?NowTr.cells[i].firstChild.value:'<input type="text" value="'+NowTr.cells[i].innerHTML+'"/>';
      }
    }</script> 
    <table border='1'>
    <tr><td>1_1</td><td>1_2</td><td>1_3</td></tr>
    <tr><td>2_1</td><td>2_2</td><td>2_3</td></tr>
    <tr><td>3_1</td><td>3_2</td><td>3_3</td></tr>
    <tr><td colspan="2">4_1</td><td>4_2</td></tr>
    <tr><td>5_1</td><td colspan="2">5_2</td></tr>
    </table>
      

  3.   

      var obj = event.srcElement; 
      
        if(obj.tagName != "TD")       return;   
        NowTr=obj.parentNode;
        for(var i=0;i<NowTr.cells.length;i++)
        {
        NowTr.cells[i].innerHTML="<input size=20 style='border:1px ' onblur='checkOk(this)' value=" +  NowTr.cells[i].innerHTML+ ">" ;
       }
    上面是我自己写的。这个错在哪个地方阿?我把value=" +  NowTr.cells[i].innerHTML+ "改称value="aaa" 就可以出来3个文本框,并且值都等于aaa。
      

  4.   


    不能用什么意思??我测试过了ie和ff都可以运行啊,是双击,不是单击
      

  5.   

    楼主自己再改改。<TABLE >
    <TR>
    <TD width="130"><div   contentEditable   style="width:100px;overflow:hidden;white-space:pre ">default</div>
    </TD>
    <TD width="130"><div   contentEditable   style="width:100px;overflow:hidden;white-space:pre ">default</div>
    </TD>
    </TR>
    </TABLE>
      

  6.   

    [code=HTML]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    <script language=javascript1.2>//定义全局的表格行列值
    var col = 5;
    var row = 2;
    //currRowIndex 选定行
    var currRowIndex = 0;
    //表单域数组(这部分作废)-----------------
    var elementNames = new Array(col);
    var k = 0;
    for(k=0;k<col;k++)
     elementNames[k] = k;
    //---------------------------------------//标题头数组
    var headers = new Array(col);
    for(k=0;k<col;k++)
    {
     headers[k] = "第" + k + "列";
    }//columnPropertys : 装载要创建的列读写属性
    var colPropertys = new Array(col)
    for(k=0;k<10;k++)
     colPropertys[k] = 1; colPropertys[0] = 0;//colDefaultValues : 代表每次增加行的时候需要装入的默认值
    var colDefaultValues = new Array(col);
    for(k=0;k<col;k++)
    {
     if(k%2==0)
      colDefaultValues[k] = "o";
     else
      colDefaultValues[k] = "j"; //代表这个不是默认值
    }//dataArray : 需要修改的数据集,修改之前预先装入,供用户参考
    var dataArray = new Array(row*col);
    var m=0,n=0;
    for(m=0;m<row;m++)
    {
     for(n=0;n<col;n++)
     {
      dataArray[m*col + n] ="array(" + m + "," + n + ")";  //注意这里代表2维数组
     }
    }
    /* 
     *====================================================================================================================
    */
    var oPopup = window.createPopup();//创建一个公共的可编辑的表格
    //参数:  
    //   formName : 表单名
    //   action : 代表当前要执行的提交动作 : 1:add 2:del 3:modefy 4:query
    //   formAction : 表格对应Form的Action
    //   tableId :表格ID
    //   colNum:表单列数目
    //   rowNum:初始表格的行数目
    function CreateTable(formName,action,formAction,tableId,colNum,rowNum)

     var startStr = new String("");
     var endStr = new String("");
     var colStr = new String("");
     startStr = "<form name=\"" + formName + "\" method=post action=\"" + formAction + "\">"; 
     startStr += "<table id=\"" + tableId +"\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">";
     
     colStr = createTrs(colNum,rowNum);
     
     endStr = "</table>"; //创建用来获取最后表格输出数据的隐藏域
     var hiddens = CreateHiddens(colNum,action);
     endStr += hiddens;
     endStr += "</form>";
     //输出表格
     //document.forms(0).elements("t").value = (startStr + colStr + endStr);
     document.write(startStr + colStr + endStr);
    }function CreateHiddens(cols,action)
    {
     var str = new String("");
     var i=0;
     for(i=0;i<cols;i++)
     {
      str +="<input type=\"hidden\" name=\"col" + (i+1) + "\" >";
     }
     str+="<input type=hidden name=\"action\" value=\"" + action + "\">";
     return str;
    }function createTrs(colNum,rowNum)
    {
     var colStr = new String("");
     var i = 0;
     var j = 0; colStr += "<tr bgColor='#00ccff'>"
     
     //创建表头行
      colStr += "<td onClick=orderTb1(this,1); onMouseOver=\"showTip('单击对本列排序');\" onMouseOut=\"hideTip();\"><center>"
      colStr += "序号";
      colStr += "</center></td>";
     for(i=1;i<=colNum;i++)
     {
      colStr += "<td align=center onClick=orderTb1(this,1); onMouseOver=\"showTip('单击对本列排序');\" onMouseOut=\"hideTip();\" >";
      colStr += headers[i-1];
      colStr += "</td>";
     } //创建表体行
     for(i=0;i<rowNum;i++)
     {
      colStr += "<tr ";
      colStr += "onDblClick=\"ChangeInput(this);\" ";  //表格行中的事件支持部分
      colStr += "onBlur=\"ResetTR(this);\" >";
      
      //创建每行的所有单元格
       colStr += "<td  onClick=SelectRow(this);>";
       colStr += i+1;
       colStr +="</td>";
      for(j=1;j<=colNum;j++)
      {
       colStr += "<td onMouseOut=\"this.bgColor='#FFFFFF';\" onMouseOver=\"this.bgColor='#00CCFF';\" >";
       colStr += dataArray[i*colNum+j-1];
       colStr +="</td>";
      }
      colStr +="</tr>";
     }
     return colStr;
    }//把某行转变为输入状态
    function ChangeInput(objTR)
    {
     var str = new String("");
     var i = 0;
     
     for(i=1;i<objTR.cells.length;i++)
     {
      str = "<input type=text name=\"" + elementNames[i-1] + "\" style=\"width:" + objTR.cells[i].width + "\" "; 
      //装入默认值
      if(colDefaultValues[i-1]=="j") //j代表该列不能装入默认值
       str += "value=\"" + objTR.cells[i].innerText + "\"";
      else//否则装入默认值
       str += "value=\"" + colDefaultValues[i-1] + "\"";
      //控制控件的读写属性
      if(colPropertys[i-1] == 0)
      {
       str += " disabled ";
      }
      str += "/>";
      objTR.cells[i].innerHTML = str;
     } objTR.ondblclick=doNothing;  //使行保持原始状态
    }//把行恢复为非输入状态
    function ResetTR(objTR)
    {
     var str = new String("");
     var i = 0;
     for(i=0;i<objTR.cells.length;i++)
     {
      var objChild;
      var tmpStr = "";
      tmpStr = objTR.cells[i].innerHTML;  //里面包含控件
      if(objTR.cells[i].firstChild!=undefined && objTR.cells[i].firstChild.value!=undefined)
      {
       tmpStr = objTR.cells[i].firstChild.value;
       if(tmpStr=="")
        tmpStr = "&nbsp;"
       objTR.cells[i].innerHTML = tmpStr + "&nbsp;";
       continue;
      }
      
      //里面不包含控件
      if(tmpStr=="&nbsp;" || tmpStr=="")
      {
       if(objTR.cells[i].innerHTML!="")
        tmpStr += objTR.cells[i].innerHTML;
       else
        tmpStr += "&nbsp;";
      }
      objTR.cells[i].innerHTML = tmpStr;  if(objTR.cells[i].innerHTML=="")
       objTR.cells[i].innerHTML="&nbsp;";
     }
    }//对表格指定列进行排序
    function orderTB(objTB,index,type){
     for(var i=1;i<(objTB.rows.length-1);i++){
      for(var j=i+1;j<objTB.rows.length;j++){
       var tmp1,tmp2;
       
       if(objTB.rows[j].cells[index].firstChild.value==undefined)
        tmp1 = objTB.rows[j].cells[index].innerText;
       else
        tmp1 = objTB.rows[j].cells[index].firstChild.value;
       
       if(objTB.rows[i].cells[index].firstChild.value==undefined)
        tmp2 = objTB.rows[i].cells[index].innerText;
       else
        tmp2 = objTB.rows[i].cells[index].firstChild.value;
        if(tmp1>tmp2)
        {
         objTB.moveRow(j,i);
        }
      }
     }
    }function orderTb1(objTD,type)
    {
     var objTR =objTD.parentElement;
     var objTable = objTR.parentElement;
     var colIndex = objTD.cellIndex;
     orderTB(objTable,colIndex); 
    }
    [/code]
      

  7.   


    //在表格末尾增加一行
    function InsertRow(tableId)
    {
     var objTable = document.getElementById(tableId);
     var col = objTable.cells.length/objTable.rows.length;
     var row = objTable.rows.length;
     var objRow = objTable.insertRow();  //增加行
     var i = 0;
     
     //取得最大序号
     var max1 = 1;
     for(i=1;i<row-1;i++)
     {
      var tmpMax = 1;
      if(parseFloat(objTable.rows[i].cells[0].innerText) > parseFloat(objTable.rows[i+1].cells[0].innerText))
      {
       tmpMax = parseFloat(objTable.rows[i].cells[0].innerText);
      }
      else
      {
       tmpMax = parseFloat(objTable.rows[i+1].cells[0].innerText);
      }
      if(tmpMax>=max1)
       max1= tmpMax;
     }
     for(i=1;i<=col;i++)
     { 
      var objCell = objRow.insertCell();
      objRow.cells[0].innerText = parseFloat(max1)+1;
      objCell.innerHTML = "&nbsp;";
      objCell.onmouseover = Td_MouseOver_Handle;
      objCell.onmouseout = Td_MouseOut_Handle
      objRow.cells[0].onclick = TD_Click_Handle;
      objRow.cells[0].onmouseover = doNothing;
      objRow.cells[0].onmouseout = doNothing;
     }
     //为新增的行提供事件绑定支持
     //objRow.attachEvent('ondblclick', dblClick_Handle);
     objRow.ondblclick = dblClick_Handle;
     objRow.onblur = click_Handle;
    }//删除最后1行
    function DeleteRow(tableId)
    {
     var objTable = document.getElementById(tableId);
     if(objTable.rows.length==1)
     {
      alert("对不起,你不能删除表格头!!!");
      return;
     }
     if(confirm("确定删除?"))
     {
      objTable.deleteRow();
     }
    }//选定指定行
    function SelectRow(objTD)
    {
     var objTR =objTD.parentElement;
     var objTable = objTR.parentElement;
     
     for(var i=1;i<objTable.rows.length;i++)
      objTable.rows[i].cells[0].bgColor = "#ffffff";
      
     objTD.bgColor="#ff0000";
     currRowIndex = objTR.rowIndex;
    }//删除指定的行
    function DeleteOneRow(tableId,rowIndex)
    {
     var objTable = document.getElementById(tableId);
     var objTable = document.getElementById(tableId);
     if(objTable.rows.length==1 || rowIndex==0)
     {
      alert("对不起,你首先必须选择要删除的行!!!");
      return;
     }
     if(confirm("确定删除?"))
     {
      objTable.deleteRow(rowIndex);
      currRowIndex = 0;
     }
     else
     {
      for(var i=1;i<objTable.rows.length;i++)
      {
       objTable.rows[i].cells[0].bgColor = "#ffffff";
       currRowIndex = 0;
      }
     }
    }//鼠标选择指定列
    function  TD_Click_Handle()
    {
     SelectRow(this)
    }//鼠标移入事件支持
    function Td_MouseOver_Handle()
    {
     this.bgColor = "#00ccff";
    }//鼠标移出事件支持
    function Td_MouseOut_Handle()
    {
     this.bgColor = "#ffffff";
    }//鼠标双击事件支持
    function dblClick_Handle()
    {
     ChangeInput(this);// 切换到输入状态
     this.ondblclick=doNothing;
    }//鼠标单击事件支持
    function click_Handle()
    {
     ResetTR(this);
    }
    //保持行的原始状态
    function doNothing()
    {
     return;
    }function showTip(msg)
    {
    with (oPopup.document.body)
    {
     style.backgroundColor="lightyellow";
     style.border="solid black 1px";
     style.fontSize = 12;
     innerHTML=msg;
    }
    oPopup.show(event.x, event.y, 95, 16, document.body);
    }
    function hideTip()
    {
     if(oPopup!=undefined)
      oPopup.hide();
    }
    //==============================格式化字符串函数(删除前后空格)
    function trim(str)
    {
     var tmpStr = new String(str);
     var startIndex = 0,endIndex = 0;
     for(var i=0;i<tmpStr.length;i++)
     {
      if(tmpStr.charAt(i)==" ")
      {
       continue;
      }
      else
      {
       startIndex = i;
       break;
      }
     }
     for(var i=tmpStr.length;i>=0;i--) //注意开始最大下标必须减1
     {
      if(tmpStr.charAt(i-1)==" ")
      {
       
       continue;
      }
      else
      {
       endIndex = i;
       break;
      }
     }
      tmpStr = tmpStr.substring(startIndex,endIndex);
      return tmpStr;
    }
    //submit 方法
    function getData(tableId,form)
    {
     var objTable = document.getElementById(tableId);
     var cols = objTable.cells.length/objTable.rows.length-1;
     var rows = objTable.rows.length-1;
     //为每个隐藏域设置值
     var i=0,j=0;
     for(i=1;i<=cols;i++)
     {
      for(j=1;j<=rows;j++)
      {
       if(objTable.rows[j].cells[i].firstChild.value==undefined)
       {
        document.forms(form).elements("col" + i).value += trim(objTable.rows[j].cells[i].innerText);
       }
       else
        document.forms(form).elements("col" + i).value += trim(objTable.rows[j].cells[i].firstChild.value);
       
       document.forms(form).elements("col" + i).value +=  "#";
      }
     }
     document.forms(form).submit();
    }</script>
    </head>
    <body>
    <input type="button" onClick="InsertRow('tableId');" value="InsertRow">
    <input type="button" onClick="DeleteRow('tableId');" value="DeleteRow">
    <input type="button" onClick="getData('tableId','specForm');" value="submit">
    <input type="button" onClick="DeleteOneRow('tableId',currRowIndex)" value="Delete Spec Row">
    <input type="button" onClick="orderTB(document.getElementById('tableId'),3);" value="order Spec Col">
    </body>
    </html>
    <script language="javascript1.2">
    CreateTable('specForm','1','sub.asp','tableId',col,row);
    </script>