2016-10-26 180 views
0

我想允许用户通过拖放他们重新排序表中的列。我正在使用jquery.dragtable.js来拖放并在拖放后保存顺序,甚至重新加载页面。在这里,我使用localStorage来存储表格顺序作为插件JS提供的选项。它只用一张桌子工作。在具有名称列标题的多个表中,它不起作用。 实际上,它会用另一个表格顺序值覆盖以前的localStorage变量。jquery表列拖放与重新排序

HTML:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Table Reorder</title> 
<script src="jquery-1.7.2.min.js"></script> 
<script src="jquery-ui.min.js"></script> 
<script src="jquery.dragtable.js"></script> 
<link rel="stylesheet" type="text/css" href="dragtable.css" /> 
</head> 
<body> 
    <table id="tblReg" class="table table-bordered"> 
     <thead> 
      <tr> 
       <th>#</th> 
       <th>First Name</th> 
       <th>Last Name</th> 
       <th>Username</th> 
       <th>Password</th> 
       <th>Email</th> 
       <th>Phone</th> 
      </tr> 
     </thead> 
     <tbody class="sort"> 
      <tr> 
       <th>1</th> 
       <td>Mark</td> 
       <td>Otto</td> 
       <td>@mdo</td> 
       <td>545trt574</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>2</th> 
       <td>Jacob</td> 
       <td>Thornton</td> 
       <td>@fat</td> 
       <td>yffft5456</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>3</th> 
       <td>Larry</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>fgfhgf444</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>4</th> 
       <td>Rima</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>jjk8899</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>5</th> 
       <td>Sundar</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>76767687hjh</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
     </tbody> 
    </table> 

    <hr> 

    <table id="tblRegMaster" class="table table-bordered"> 
     <thead> 
      <tr> 
       <th>#</th> 
       <th>First Name</th> 
       <th>Last Name</th> 
       <th>Username</th> 
       <th>Password</th> 
       <th>Email</th> 
       <th>Phone</th> 
      </tr> 
     </thead> 
     <tbody class="sort"> 
      <tr> 
       <th>1</th> 
       <td>Mark</td> 
       <td>Otto</td> 
       <td>@mdo</td> 
       <td>545trt574</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>2</th> 
       <td>Jacob</td> 
       <td>Thornton</td> 
       <td>@fat</td> 
       <td>yffft5456</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>3</th> 
       <td>Larry</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>fgfhgf444</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>4</th> 
       <td>Rima</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>jjk8899</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
      <tr> 
       <th>5</th> 
       <td>Sundar</td> 
       <td>the Bird</td> 
       <td>@twitter</td> 
       <td>76767687hjh</td> 
       <td>[email protected]</td> 
       <td>7788994320</td> 
      </tr> 
     </tbody> 
    </table> 

jQuery的 -

$(document).ready(function(){ 

    var tblReg = $('#tblReg').attr('id'); 
    var tblRegMaster = $('#tblRegMaster').attr('id'); 

    processDnD(tblReg); 
    processDnD(tblRegMaster); 

}); 


function processDnD(cuTable){ 
    $('#'+cuTable).find('th').each(function() { 
     var ctxt = $(this).text(); 
     if(ctxt == 'First Name'){ 
      $(this).attr('id','firstName'); 
     }else if(ctxt == 'Password'){ 
      $(this).attr('id','password'); 
     }else if(ctxt == 'Email'){ 
      $(this).attr('id','iemail'); 
     }else if(ctxt == 'Username'){ 
      $(this).attr('id','Username'); 
     }else if(ctxt == 'Last Name'){ 
      $(this).attr('id','lastName'); 
     }else if(ctxt == '#'){ 
      $(this).attr('id','slNo'); 
     }else if(ctxt == 'Phone'){ 
      $(this).attr('id','phone'); 
     }  
    }) 

    $('#'+cuTable).dragtable({ 
     persistState: function(table) { 
     if (!window.localStorage) return; 
      var ss = window.localStorage; 
      table.el.find('th').each(function(i) { 
      if(this.id != '') {table.sortOrder[this.id]=i;} 
     }); 
     ss.setItem('setTableOrder', JSON.stringify(table.sortOrder)); 
     }, 
     restoreState: eval('(' + window.localStorage.getItem('setTableOrder') + ')') 
    }); 

    $('#'+cuTable).each(function(){ 
     $(this).dragtable({ 
      placeholder: 'dragtable-col-placeholder', 
      items: 'thead th:not(.notdraggable):not(:has(.dragtable-drag-handle)), .dragtable-drag-handle', 
      appendTarget: $(this).parent(), 
      scroll: true 
     }) 
    }); 
} 

我想reoder multipule表工作。请提出任何解决方案。由于

插件参见:https://github.com/akottr/dragtable

+0

jquery dragtable可以使用两个表(和您的代码似乎工作正确)。也许你想要重新排序第一个表格也会改变第二个表格的顺序? – Dekel

+0

它工作完美!检查这个http://codepen.io/mozzi/pen/gwyZrd –

+0

是的也改变了第二个或更多表的顺序@ dekel –

回答

1

我已经解决了这个问题,你可以从上的jsfiddle检查以下网址。我希望这个片段可以帮助你。

jsfiddle.net/raeeshalam/rn8sxxba