我用的下面的链接里的JavaScript方法进行拖动,这个方法是可行的,但是当表格行数比较长时,后面的表格就拖不动了。
我试过很多修改,也没能成功,请大家帮我一下,当你深入研究之后,能修改到可以拖动任何表格了,请回复贴,不要提供理论上的指导,谢谢!!
http://study.qqcf.com/web/568/156086.htm

解决方案 »

  1.   

    百度搜索“怎么用javascript进行拖拽”这是E文的原址 http://www.webreference.com/programming/javascript/mk/column2/index.html
      

  2.   

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>这是排座位了</title>    <script language="javascript">
      /*--------全局变量-----------*/  
      var x0,y0,x1,y1,isreplace;  
      var movable = false;  
      var preCell = null;  
      var normalColor = null;  
      var preColor = "lavender";  
      var endColor = "#FFCCFF";  
      /*--------全局变量-----------*/  
     
      //得到控件的绝对位置  
      function getPos(cell)  
      {  
      var pos = new Array();  
      var t=cell.offsetTop;  
      var l=cell.offsetLeft;  
      while(cell=cell.offsetParent)  
      {  
      t+=cell.offsetTop;  
      l+=cell.offsetLeft;  
      }  
      pos[0] = t; //纵坐标  
      pos[1] = l; //横坐标  
      return pos;  
      }  
     
      //当鼠标拖动某一个td时,显示临时图层  
      function showDiv(ischange)  
      {  
      var ischange=ischange  
      isreplace=ischange     //得到触发该事件的是哪个table来决定是否替换  
      var obj = event.srcElement;   //得到触发该事件的对象,也就是对触发该事件对象的一个引用  
      var pos = new Array();       //定义一个数组用来存放位置参数  
      //获取过度图层  
      var oDiv = document.all.tempDiv;       //对临时层的一个引用  
      if(obj.tagName.toLowerCase() == "td")  
      {  
      obj.style.cursor = "hand";         //当按下鼠标时,鼠标模式改成手型  
      pos = getPos(obj);               //得到该td的位置(包括横纵坐标)  
        //计算中间过度层位置,赋值  
      oDiv.style.width = obj.offsetWidth;   //得到td的宽,赋值给临时层tempDiv  
      oDiv.style.height = obj.offsetHeight;   //得到td的高,赋值给临时层tempDiv  
      oDiv.style.top = pos[0];           //得到该td的纵坐标的位置,赋值给临时层tempDiv  
      oDiv.style.left = pos[1];           //得到该td的横坐标的位置,赋值给临时层tempDiv  
      oDiv.innerHTML = obj.innerHTML;       //得到该td的文本显示内容,赋值给临时层tempDiv  
      //oDiv.id=obj.id;///////////////////////////////////////////////////////////////
      oDiv.style.display = "";           //显示临时层,也就是当鼠标选中某一个td,按下去时显示的那个紫红色的框框  
      x0 = pos[1];  
      y0 = pos[0];  
      x1 = event.clientX;               //返回当前鼠标所在位置的横坐标  
      y1 = event.clientY;               //返回当前鼠标所在位置的纵坐标  
      //记住原td  
      normalColor = obj.style.backgroundColor;   //得到触发该事件对象的背景色  
      obj.style.backgroundColor = preColor;     //改变触发该事件的对象的背景色  
        preCell = obj;                   //赋值给另外一个空对象(属公共的变量)  
       
      movable = true;                   //标识有td在移动  
      }  
      }  
      //当拖动一个td时,经过其他td时所处理的事件  
      function dragDiv()  
      {  
      if(movable)                       //当上面的showDiv事件为真时,执行下面的代码  
      {  
      var oDiv = document.all.tempDiv;         //对临时层的一个引用  
      var pos = new Array();               //定义一个存放位置的数组  
      oDiv.style.top = event.clientY - y1 + y0;   //定义临时层的位置(纵坐标)为:当前鼠标位置(纵坐标)-按下鼠标时的鼠标位置(纵坐标)+原来td的纵坐标  
      oDiv.style.left = event.clientX - x1 + x0;   //定义临时层的位置(横坐标)为:当前鼠标位置(横坐标)-按下鼠标时的鼠标位置(横坐标)+原来td的横坐标  
      var oTable = document.all.tb2;  
      //根据条件显示不同背景色  
      for(var i=0; i<oTable.cells.length; i++)  
      {  
        if(oTable.cells[i].tagName.toLowerCase() == "td")  
        {  
        pos = getPos(oTable.cells[i]);  
        if(event.x>pos[1] && event.x<pos[1]+oTable.cells[i].offsetWidth && event.y>pos[0] && event.y<pos[0]+oTable.cells[i].offsetHeight)  
        {  
        if(oTable.cells[i] != preCell)  
          oTable.cells[i].style.backgroundColor = endColor;    
        }  
        else  
        {  
        if(oTable.cells[i] != preCell)  
          oTable.cells[i].style.backgroundColor = normalColor;  
        }  
        }  
      }    
      }  
      }  
     
      function hideDiv()  
      {  
      if(movable)  
      {  
      var oTable = document.all.tb2;  
      var oTable1=document .all.tb3;
      var pos = new Array();  
      if(preCell != null)  
      {  
        for(var i=0; i<oTable.cells.length; i++)  
        {    
        pos = getPos(oTable.cells[i]);  
        //计算鼠标位置,是否在某个单元格的范围之内  
        if(event.x>pos[1]&&event.x<pos[1]+oTable.cells[i].offsetWidth   && event.y>pos[0]&& event.y<pos[0]+oTable.cells[i].offsetHeight)  
        {  
        if(oTable.cells[i].tagName.toLowerCase() == "td" && oTable.cells[i].style.backgroundColor.toLowerCase()=="#ffccff")  
        {  
    if(isreplace=="2"){       //如果是下面表格内部拖动,则内容互换  
    preCell.innerHTML = oTable.cells[i].innerHTML;  
    }  
    //当下面的td中有内容时,则上面的课程将与下面互换----注意:这个if和下面紧接着的if位置不能互换.  
    if(isreplace=="1" && document.all.tempDiv.innerHTML.length > 0){
    if(oTable.cells[i].innerHTML=="学生姓名"){
    document.all.tb1.deleteRow(preCell.parentElement.rowIndex);
    }else{
    preCell.innerHTML=oTable.cells[i].innerHTML;
    }
    oTable.cells[i].innerHTML = document.all.tempDiv.innerHTML;
    }
    //当下面的td中没有内容时,则上面将被移除----注意:这个if和上面紧接着的if位置不能互换.  
    if(isreplace=="1" && oTable.cells[i].innerText.length == 1){      
    preCell.innerHTML=""  
    oTable.cells[i].innerHTML = document.all.tempDiv.innerHTML;  
    }  
       
    if(isreplace=="2"){  
    oTable.cells[i].innerHTML = document.all.tempDiv.innerHTML;  
    }  
          //清除原单元格和目标单元格的样式  
          preCell.style.backgroundColor = normalColor;  
          oTable.cells[i].style.backgroundColor = normalColor;  
          oTable.cells[i].style.cursor = "";  
          preCell.style.cursor = "";  
          preCell.style.backgroundColor = normalColor;  
        }  
        }  
        }  
      }  
      movable = false;  
      //清除提示图层  
      document.all.tempDiv.style.display = "none";  
      }  
      }  
      //在页面提交时触发下面的事件,给隐藏字段赋值  
      function getvalue(){  
         var oTable = document.all.tb2;
         var oTable1=document .all.tb3;
      for(var i=0; i<oTable.cells.length; i++){  
        document.all["bb"+i].value = oTable.cells[i].innerHTML;
      }  
       for(var i=0; i<oTable1.cells.length; i++){ 
      // alert ("2");    
         document.all["bbs"+i].value = oTable1.cells[i].innerHTML;
      }  
      
      }  
      document.onmouseup = function()  
      {  
      hideDiv();  
      var oTable = document.all.tb2;  
      for(var i=0; i<oTable.cells.length; i++)  
      oTable.cells[i].style.backgroundColor = normalColor;  
      }  
     
      document.onmousemove = function()  
      {  
      dragDiv();  
      }  
      
      function install()
      {
       var row = document.all.row.value;
    var col = document.all.col.value;
    var oTable = document.all.tb2;//tb2是一个无行列的表格
    var oTable1 = document.all.tb3;
    var odiv = document.all.hidden;//这是一个隐藏的DIV
    /*--------清除以前的数据-----------*/  
    var rowNum=oTable.rows.length;
         for (var p=0;p<rowNum;p++)
         {
             oTable.deleteRow(p);
             rowNum=rowNum-1;
             p=p-1;
         }

    odiv.innerHTML="";
    /*--------清除以前的数据-----------*/  
    for (var i=0;i<row;i++){
    var _tr=oTable.insertRow(oTable.rows.length);
    for (var j=0;j<col;j++){
    var _td=_tr.insertCell(_tr.cells.length);
    _td.attachEvent("onmouseover",show);
    _td.attachEvent("onmouseout",hide);
    _txt=document.createTextNode("学生姓名");
    _td.appendChild(_txt);

    }
    }

      

  3.   

    for (var i=0;i<row;i++){
    var _tr1=oTable1.insertRow(oTable1.rows.length);
    for (var j=0;j<col;j++){
    var _td1=_tr1.insertCell(_tr1.cells.length);
    _td1.attachEvent("onmouseover",show);
    _td1.attachEvent("onmouseout",hide);
    _txt1=document.createTextNode("学生ID");
    _td1.appendChild(_txt1);

    }
    }

    for(var m=0;m<row*col;m++)//根据行列创建文本控件
    {
    var _input=document.createElement('input');
    _input.setAttribute('type', 'text');
    _input.setAttribute('size', '8');
         _input.setAttribute('id', 'bb'+m);
    odiv.appendChild(_input);
    }
    for(var m=0;m<row*col;m++)//根据行列创建文本控件
    {
    var _input1=document.createElement('input');
    _input1.setAttribute('type', 'text');
    _input1.setAttribute('size', '4');
         _input1.setAttribute('id', 'bbs'+m);
    odiv.appendChild(_input1);
    }
      }
      var delobj;
      function show()
      {
       var obj = event.srcElement;
    if(obj.innerHTML!=""){
    delobj = obj;
    var del = document.all.delDiv;
    var pos = new Array();
    pos = getPos(obj);
    var x = pos[1] + obj.offsetWidth - 15;
    var y = pos[0] + obj.offsetHeight - 15;
    del.style.left = x;
    del.style.top = y;
    del.style.display = "";
    }
      }
      
      function hide()
      {
       var pos = new Array();
    pos = getPos(delobj);
    var x = pos[1] + delobj.offsetWidth;
    var y = pos[0] + delobj.offsetHeight;
    xx = event.clientX;
       yy = event.clientY;
    if(!(xx<x && xx>pos[1] && yy<y && yy>pos[0])){
       var del = document.all.delDiv;
    del.style.display = "none";
    }
      }  function del()
      {
       if(delobj.innerHTML!="学生姓名"){
    var oTable1 = document.all.tb1;
    var _tr=oTable1.insertRow(oTable1.rows.length);
    var _td=_tr.insertCell(_tr.cells.length);
    _txt=document.createTextNode(delobj.innerHTML);
    _td.appendChild(_txt);
    }
       delobj.innerHTML="学生姓名";
      }
        </script>    <style type="text/css">
            #tb1
            {
                border-right: black 1px solid;
                border-top: black 1px solid;
                font-size: 13px;
                border-left: black 1px solid;
                width: 80px;
                border-bottom: black 1px solid;
                border-collapse: collapse;
            }
            #tb1 TD
            {
                cursor: pointer;
            }
            #tb2
            {
                font-size: 13px;
            }
            #tb2 TD
            {
                border-right: black 1px solid;
                border-top: black 1px solid;
                border-left: black 1px solid;
                width: 80px;
                cursor: pointer;
                border-bottom: black 1px solid;
                height: 25px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        行:<input id="row" size="6">
        列:<input id="col" size="6">
        <input onclick="install();" type="button" value="设定">
        <table cellspacing="0" cellpadding="0" border="0">
            <tbody>
                <tr>
                    <td valign="top">
                        <table onselectstart="return false;" onmousedown="showDiv('1')" id="tb1" cellspacing="0"
                            runat="server" border="0">
                            <tbody>
                            </tbody>
                        </table>
                    </td>
                    <td valign="top">
                        <table onselectstart="return false;" onmousedown="showDiv('2')" id="tb2" cellspacing="10"
                            cellpadding="0">
                            <tbody>
                            </tbody>
                        </table>
                        <div onselectstart="return false" id="tempDiv" style="border-right: black 1px solid;
                            border-top: black 1px solid; display: none; font-size: 12px; border-left: black 1px solid;
                            cursor: hand; border-bottom: black 1px solid; position: absolute; background-color: #ffccff">
                        </div>
                        <div id="delDiv" style="display: none; cursor: hand; position: absolute">
                            <img onclick="del()" src="images/del.gif" border="0">
                        </div>
                    </td>
                    <td valign="top">
                        <table onselectstart="return false;" onmousedown="showDiv('2')" id="tb3" cellspacing="10"
                            cellpadding="0">
                            <tbody>
                            </tbody>
                        </table>
                    </td>
                </tr>
            </tbody>
        </table>
        <input onclick="getvalue()" type="button" value="获取排列名单">
        <hr>
        <div id="hidden" style="width: 600px">
            <%--得到排好座位的值--%>
        </div>
     
        </form>
    </body></html>
     public partial class 排座位 : System.Web.UI.Page
        {
           
            protected void Page_Load(object sender, EventArgs e)
            {            for (int i = 0; i < 10; i++)
                {
                    HtmlTableRow tr = new HtmlTableRow();
                    HtmlTableCell tc = new HtmlTableCell();
                    tc.ID = "course" + i.ToString();
                    tc.InnerText = i.ToString() + "|" + i + "name";
                    tr.Controls.Add(tc);
                    tb1.Rows.Add(tr);
                }        }    }
      

  4.   

    jquery插件即可