Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/01/2011, 16:46
lodoman
 
Fecha de Ingreso: diciembre-2010
Mensajes: 10
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Drag and Drop de Filas en una Tabla

Código HTML:
Ver original
  1.    
  2.       <head>    
  3.    
  4.         <script language="JavaScript" type="text/javascript">
  5.     /*<![CDATA[*/
  6.     var zxcDObj;
  7.     var zxcDTable=[];
  8.    
  9.     function zxcInitDragRow(zxcid){
  10.      var zxctable=document.getElementById(zxcid);
  11.      zxcDTable.push([zxctable,zxctable.rows[0].cells.length]);
  12.      zxcclone=zxcES(zxctable.cloneNode(true),{position:'absolute'},document.getElementsByTagName('BODY')[0]);
  13.      var zxctbdy=zxcclone.getElementsByTagName('TBODY')[0];
  14.      while (zxctbdy.firstChild) zxctbdy.removeChild(zxctbdy.firstChild);
  15.      var zxcrows=zxctable.rows;
  16.      for (var zxc0=0;zxc0<zxcrows.length;zxc0++){
  17.       zxcrows[zxc0].clone=zxcclone;
  18.       zxcrows[zxc0].table=zxctable;
  19.       zxcAddEvt(zxcrows[zxc0],'zxcDragRowSrt','mousedown');
  20.      }
  21.     }
  22.    
  23.     function zxcDragRowSrt(zxcevt){
  24.      if (this.table.rows.length<1) return;
  25.      document.onselectstart=function(event){window.event.returnValue=false; }
  26.      var zxcclone=zxcES(this.cloneNode(true),{left:zxcPos(this)[0]+'px',top:zxcPos(this)[1]+'px'},this.clone.getElementsByTagName('TBODY')[0]);
  27.      zxcES(this.clone,{left:zxcPos(this)[0]+'px',top:zxcPos(this)[1]+'px'});
  28.      var zxccells=this.cells;
  29.      for (var zxc0=0;zxc0<zxccells.length;zxc0++) zxcES(zxcclone.cells[zxc0],{width:zxccells[zxc0].width});
  30.      zxcDObj=[this.clone,this.clone.offsetLeft-zxcMse(zxcevt)[0],this.clone.offsetTop-zxcMse(zxcevt)[1],this];
  31.     }
  32.    
  33.     function zxcDragRow(zxcevt){
  34.      if (zxcDObj){
  35.       zxcES(zxcDObj[0],{left:(zxcMse(zxcevt)[0]+zxcDObj[1])+'px',top:zxcMse(zxcevt)[1]+zxcDObj[2]+'px'});
  36.       return false;
  37.      }
  38.     }
  39.    
  40.     function zxcRowMseUp(){
  41.      document.onselectstart=null;
  42.      if (!zxcDObj) return;
  43.      for (var zxc0=0;zxc0<zxcDTable.length;zxc0++){
  44.       var zxctpos=zxcPos(zxcDTable[zxc0][0]);
  45.       if (zxcDObj[3]&&zxcDTable[zxc0][1]==zxcDObj[3].cells.length&&zxctpos[0]-10<zxcDObj[0].offsetLeft&&zxctpos[0]+zxcDTable[zxc0][0].offsetWidth>zxcDObj[0].offsetLeft&& zxctpos[1]-zxcDObj[3].offsetHeight<zxcDObj[0].offsetTop &&zxctpos[1]+zxcDTable[zxc0][0].offsetHeight>zxcDObj[0].offsetTop){
  46.        var zxctrs=zxcDTable[zxc0][0].rows;
  47.        for (var zxc0a=0;zxc0a<zxcDTable[zxc0][1];zxc0a++) zxcES(zxcDObj[3].cells[zxc0a],{width:zxcDTable[zxc0][0].rows[0].cells[zxc0a].offsetWidth+'px'})
  48.        for (var zxc0b=0;zxc0b<zxctrs.length;zxc0b++){
  49.         if (zxcPos(zxctrs[zxc0b])[1]>zxcPos(zxcDObj[0])[1]&&zxctrs[zxc0b]!=zxcDObj[3]){
  50.          zxctrs[0].parentNode.insertBefore(zxcDObj[3],zxctrs[zxc0b]);
  51.          zxcDObj[3]=null;
  52.          break;
  53.         }
  54.        }
  55.        if (zxcDObj[3]) zxctrs[0].parentNode.appendChild(zxcDObj[3]);
  56.       }
  57.      }
  58.      var zxctr=zxcDObj[0].getElementsByTagName('TR')[0];
  59.      if (zxctr) zxctr.parentNode.removeChild(zxctr);
  60.      zxcDObj=false;
  61.     }
  62.    
  63.     function zxcMse(e){
  64.       if (!document.all){ return [e.clientX+zxcDocS()[0],e.clientY+zxcDocS()[1]] }
  65.       else { return [event.clientX,event.clientY]; }
  66.     }
  67.    
  68.     function zxcDocS(){
  69.      if (!document.body.scrollTop){ return [document.documentElement.scrollLeft,document.documentElement.scrollTop]; }
  70.      else { return [document.body.scrollLeft,zxcsy=document.body.scrollTop]; }
  71.     }
  72.    
  73.     function zxcES(zxcele,zxcstyle,zxcp,zxctxt){
  74.      if (typeof(zxcele)=='string'){ zxcele=document.createElement(zxcele); }
  75.      for (key in zxcstyle){ zxcele.style[key]=zxcstyle[key]; }
  76.      if (zxcp){ zxcp.appendChild(zxcele); }
  77.      if (zxctxt){ zxcele.appendChild(document.createTextNode(zxctxt)); }
  78.      return zxcele;
  79.     }
  80.    
  81.     function zxcPos(zxcobj){
  82.      zxclft=zxcobj.offsetLeft;
  83.      zxctop=zxcobj.offsetTop;
  84.      while(zxcobj.offsetParent!=null){
  85.       zxcpar=zxcobj.offsetParent;
  86.       zxclft+=zxcpar.offsetLeft;
  87.       zxctop+=zxcpar.offsetTop;
  88.       zxcobj=zxcpar;
  89.      }
  90.      return [zxclft,zxctop];
  91.     }
  92.    
  93.     function zxcEventAdd(zxco,zxct,zxcf) {
  94.      if ( zxco.addEventListener ){ zxco.addEventListener(zxct, function(e){ return zxco[zxcf](e);}, false); }
  95.      else if ( zxco.attachEvent ){ zxco.attachEvent('on'+zxct,function(e){ return zxco[zxcf](e); }); }
  96.      else {
  97.       var zxcPrev=zxco["on" + zxct];
  98.       if (zxcPrev){ zxco['on'+zxct]=function(e){ zxcPrev(e); zxco[zxcf](e); }; }
  99.       else { zxco['on'+zxct]=zxco[zxcf]; }
  100.      }
  101.     }
  102.    
  103.     function zxcAddEvt(zxcobj,zxcfun,zxcevt){
  104.      if (zxcobj['zxcadd'+zxcfun+zxcevt]) return;
  105.      zxcobj['zxcadd'+zxcfun+zxcevt]=window[zxcfun];
  106.      zxcEventAdd(zxcobj,zxcevt,'zxcadd'+zxcfun+zxcevt);
  107.     }
  108.     zxcAddEvt(document,'zxcDragRow','mousemove');
  109.     zxcAddEvt(document,'zxcRowMseUp','mouseup');
  110.     /*]]>*/
  111.        
  112.  
  113.       </head>
  114.  
  115.       <body onload="zxcInitDragRow('dragDropTable')">
  116.  
  117.       <table id="dragDropTable" border="2" cellpadding="2" cellspacing="0">
  118.  
  119.       <thead>
  120.  
  121.       </thead>
  122.  
  123.       <tbody>
  124.  
  125.           <tr>
  126.  
  127.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  128.  
  129.               <td>Row 0, Cell 1</td>
  130.  
  131.               <td>Row 0, Cell 2</td>
  132.  
  133.               <td>Row 0, Cell 3</td>
  134.  
  135.           </tr>
  136.  
  137.           <tr>
  138.  
  139.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  140.  
  141.               <td>Row 1, Cell 1</td>
  142.  
  143.               <td>Row 1, Cell 2</td>
  144.  
  145.               <td>Row 1, Cell 3</td>
  146.  
  147.           </tr>
  148.  
  149.           <tr>
  150.  
  151.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  152.  
  153.               <td>Row 2, Cell 1</td>
  154.  
  155.               <td>Row 2, Cell 2</td>
  156.  
  157.               <td>Row 2, Cell 3</td>
  158.  
  159.           </tr>
  160.  
  161.       </tbody>
  162.  
  163.       <tfoot></tfoot>
  164.  
  165.       </table>
  166.  
  167.       </body>
  168.  
  169.       </html>

mira este codigo lo puedes copiar completo y funciona, tiene un errorsillo quizas lo puedas solucionar tambien en el <body onload="zxcInitDragRow('dragDropTable')"> se hace referencia a la tabla por su "id" puedes usar dos tablas para pasar filas entre ellas esto lo harias asi:

<body onload="zxcInitDragRow('tabla1');zxcInitDragRow('t abla2');">

saludos.