Изменение порядка следования колонок в Datatables по клику

246
11 марта 2017, 03:24

Здравствуйте. Использую плагин datables для верстки таблицы. В API плагина есть свойство ColReorder, включающее возможность изменения порядка следования колонок. Имеется также метод colReorder.order(), который может по клику менять порядок колонок согласно заранее установленным индексам в массиве:

$('#reverse').click( function (e) {
  table.colReorder.order( [ 5, 4, 3, 2, 1, 0 ] );
});

Задача в том, чтобы сделать возможность изменять порядок следования колонок на кнопки "вперед" / "назад", т.е. по клику необходимо каким-то образом менять местами эти индексы в массиве. Подскажите пожалуйста, как это можно сделать.

$(document).ready(function() { 
    $('#example').DataTable({ 
      colReorder: true, 
      ordering: false, 
      bFilter: false, 
      bLengthChange: false, 
      bInfo: false, 
      bPaginate: false, 
      autoWidth: false, 
      fixedHeader: { 
          header: true, 
          footer: true 
      } 
    }); 
} );
.btns-block { 
  display: flex; 
  justify-content: space-between; 
}
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.13/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.1/datatables.min.css"/> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.13/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.1/rr-1.2.0/datatables.min.js"></script> 
 
<table id="example" class="display" cellspacing="0" width="100%"> 
  <thead> 
      <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Age</th> 
          <th>Start date</th> 
          <th>Salary</th> 
      </tr> 
  </thead> 
  <tfoot> 
      <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Age</th> 
          <th>Start date</th> 
          <th>Salary</th> 
      </tr> 
  </tfoot> 
  <tbody> 
      <tr> 
          <td>Tiger Nixon</td> 
          <td>System Architect</td> 
          <td>Edinburgh</td> 
          <td>61</td> 
          <td>2011/04/25</td> 
          <td>$320,800</td> 
      </tr> 
      <tr> 
          <td>Garrett Winters</td> 
          <td>Accountant</td> 
          <td>Tokyo</td> 
          <td>63</td> 
          <td>2011/07/25</td> 
          <td>$170,750</td> 
      </tr> 
      <tr> 
          <td>Ashton Cox</td> 
          <td>Junior Technical Author</td> 
          <td>San Francisco</td> 
          <td>66</td> 
          <td>2009/01/12</td> 
          <td>$86,000</td> 
      </tr> 
      <tr> 
          <td>Cedric Kelly</td> 
          <td>Senior Javascript Developer</td> 
          <td>Edinburgh</td> 
          <td>22</td> 
          <td>2012/03/29</td> 
          <td>$433,060</td> 
      </tr> 
      <tr> 
          <td>Airi Satou</td> 
          <td>Accountant</td> 
          <td>Tokyo</td> 
          <td>33</td> 
          <td>2008/11/28</td> 
          <td>$162,700</td> 
      </tr> 
      <tr> 
          <td>Brielle Williamson</td> 
          <td>Integration Specialist</td> 
          <td>New York</td> 
          <td>61</td> 
          <td>2012/12/02</td> 
          <td>$372,000</td> 
      </tr> 
      <tr> 
          <td>Herrod Chandler</td> 
          <td>Sales Assistant</td> 
          <td>San Francisco</td> 
          <td>59</td> 
          <td>2012/08/06</td> 
          <td>$137,500</td> 
      </tr> 
      <tr> 
          <td>Rhona Davidson</td> 
          <td>Integration Specialist</td> 
          <td>Tokyo</td> 
          <td>55</td> 
          <td>2010/10/14</td> 
          <td>$327,900</td> 
      </tr> 
      <tr> 
          <td>Colleen Hurst</td> 
          <td>Javascript Developer</td> 
          <td>San Francisco</td> 
          <td>39</td> 
          <td>2009/09/15</td> 
          <td>$205,500</td> 
      </tr> 
      <tr> 
          <td>Sonya Frost</td> 
          <td>Software Engineer</td> 
          <td>Edinburgh</td> 
          <td>23</td> 
          <td>2008/12/13</td> 
          <td>$103,600</td> 
      </tr> 
      <tr> 
          <td>Jena Gaines</td> 
          <td>Office Manager</td> 
          <td>London</td> 
          <td>30</td> 
          <td>2008/12/19</td> 
          <td>$90,560</td> 
      </tr> 
      <tr> 
          <td>Quinn Flynn</td> 
          <td>Support Lead</td> 
          <td>Edinburgh</td> 
          <td>22</td> 
          <td>2013/03/03</td> 
          <td>$342,000</td> 
      </tr> 
      <tr> 
          <td>Charde Marshall</td> 
          <td>Regional Director</td> 
          <td>San Francisco</td> 
          <td>36</td> 
          <td>2008/10/16</td> 
          <td>$470,600</td> 
      </tr> 
      <tr> 
          <td>Haley Kennedy</td> 
          <td>Senior Marketing Designer</td> 
          <td>London</td> 
          <td>43</td> 
          <td>2012/12/18</td> 
          <td>$313,500</td> 
      </tr> 
      <tr> 
          <td>Tatyana Fitzpatrick</td> 
          <td>Regional Director</td> 
          <td>London</td> 
          <td>19</td> 
          <td>2010/03/17</td> 
          <td>$385,750</td> 
      </tr> 
      <tr> 
          <td>Michael Silva</td> 
          <td>Marketing Designer</td> 
          <td>London</td> 
          <td>66</td> 
          <td>2012/11/27</td> 
          <td>$198,500</td> 
      </tr> 
      <tr> 
          <td>Paul Byrd</td> 
          <td>Chief Financial Officer (CFO)</td> 
          <td>New York</td> 
          <td>64</td> 
          <td>2010/06/09</td> 
          <td>$725,000</td> 
      </tr> 
      <tr> 
          <td>Gloria Little</td> 
          <td>Systems Administrator</td> 
          <td>New York</td> 
          <td>59</td> 
          <td>2009/04/10</td> 
          <td>$237,500</td> 
      </tr> 
      <tr> 
          <td>Bradley Greer</td> 
          <td>Software Engineer</td> 
          <td>London</td> 
          <td>41</td> 
          <td>2012/10/13</td> 
          <td>$132,000</td> 
      </tr> 
      <tr> 
          <td>Dai Rios</td> 
          <td>Personnel Lead</td> 
          <td>Edinburgh</td> 
          <td>35</td> 
          <td>2012/09/26</td> 
          <td>$217,500</td> 
      </tr> 
      <tr> 
          <td>Jenette Caldwell</td> 
          <td>Development Lead</td> 
          <td>New York</td> 
          <td>30</td> 
          <td>2011/09/03</td> 
          <td>$345,000</td> 
      </tr> 
      <tr> 
          <td>Yuri Berry</td> 
          <td>Chief Marketing Officer (CMO)</td> 
          <td>New York</td> 
          <td>40</td> 
          <td>2009/06/25</td> 
          <td>$675,000</td> 
      </tr> 
      <tr> 
          <td>Caesar Vance</td> 
          <td>Pre-Sales Support</td> 
          <td>New York</td> 
          <td>21</td> 
          <td>2011/12/12</td> 
          <td>$106,450</td> 
      </tr> 
      <tr> 
          <td>Doris Wilder</td> 
          <td>Sales Assistant</td> 
          <td>Sidney</td> 
          <td>23</td> 
          <td>2010/09/20</td> 
          <td>$85,600</td> 
      </tr> 
      <tr> 
          <td>Angelica Ramos</td> 
          <td>Chief Executive Officer (CEO)</td> 
          <td>London</td> 
          <td>47</td> 
          <td>2009/10/09</td> 
          <td>$1,200,000</td> 
      </tr> 
      <tr> 
          <td>Gavin Joyce</td> 
          <td>Developer</td> 
          <td>Edinburgh</td> 
          <td>42</td> 
          <td>2010/12/22</td> 
          <td>$92,575</td> 
      </tr> 
      <tr> 
          <td>Jennifer Chang</td> 
          <td>Regional Director</td> 
          <td>Singapore</td> 
          <td>28</td> 
          <td>2010/11/14</td> 
          <td>$357,650</td> 
      </tr> 
      <tr> 
          <td>Brenden Wagner</td> 
          <td>Software Engineer</td> 
          <td>San Francisco</td> 
          <td>28</td> 
          <td>2011/06/07</td> 
          <td>$206,850</td> 
      </tr> 
      <tr> 
          <td>Fiona Green</td> 
          <td>Chief Operating Officer (COO)</td> 
          <td>San Francisco</td> 
          <td>48</td> 
          <td>2010/03/11</td> 
          <td>$850,000</td> 
      </tr> 
      <tr> 
          <td>Shou Itou</td> 
          <td>Regional Marketing</td> 
          <td>Tokyo</td> 
          <td>20</td> 
          <td>2011/08/14</td> 
          <td>$163,000</td> 
      </tr> 
      <tr> 
          <td>Michelle House</td> 
          <td>Integration Specialist</td> 
          <td>Sidney</td> 
          <td>37</td> 
          <td>2011/06/02</td> 
          <td>$95,400</td> 
      </tr> 
      <tr> 
          <td>Suki Burks</td> 
          <td>Developer</td> 
          <td>London</td> 
          <td>53</td> 
          <td>2009/10/22</td> 
          <td>$114,500</td> 
      </tr> 
  </tbody> 
</table> 
 
<div class="btns-block"> 
  <a class="btn-prev" href="#close">Prev</a> 
  <a class="btn-next" href="#close">Next</a> 
 
</div>

Answer 1

Так?

var index = [0,1,2,3,4,5]; 
 
var table = $('#example').DataTable({ 
  colReorder: true, 
  ordering: false, 
  bFilter: false, 
  bLengthChange: false, 
  bInfo: false, 
  bPaginate: false, 
  autoWidth: false, 
  fixedHeader: { 
      header: true, 
      footer: true 
  } 
}); 
 
$('.btn-next').click(function() { 
  index.push(index.shift()); 
  table.colReorder.order( index ); 
  index = [0,1,2,3,4,5]; 
}); 
 
$('.btn-prev').click(function() { 
  index.splice(0, 0, index.splice(index.length - 1, 1)[0]); 
  table.colReorder.order( index ); 
  index = [0,1,2,3,4,5]; 
});
.btns-block { 
  display: flex; 
  justify-content: space-between; 
}
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.13/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.1/datatables.min.css"/> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.13/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.1/rr-1.2.0/datatables.min.js"></script> 
 
<table id="example" class="display" cellspacing="0" width="100%"> 
  <thead> 
      <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Age</th> 
          <th>Start date</th> 
          <th>Salary</th> 
      </tr> 
  </thead> 
  <tfoot> 
      <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Age</th> 
          <th>Start date</th> 
          <th>Salary</th> 
      </tr> 
  </tfoot> 
  <tbody> 
      <tr> 
          <td>Tiger Nixon</td> 
          <td>System Architect</td> 
          <td>Edinburgh</td> 
          <td>61</td> 
          <td>2011/04/25</td> 
          <td>$320,800</td> 
      </tr> 
      <tr> 
          <td>Garrett Winters</td> 
          <td>Accountant</td> 
          <td>Tokyo</td> 
          <td>63</td> 
          <td>2011/07/25</td> 
          <td>$170,750</td> 
      </tr> 
      <tr> 
          <td>Ashton Cox</td> 
          <td>Junior Technical Author</td> 
          <td>San Francisco</td> 
          <td>66</td> 
          <td>2009/01/12</td> 
          <td>$86,000</td> 
      </tr> 
      <tr> 
          <td>Cedric Kelly</td> 
          <td>Senior Javascript Developer</td> 
          <td>Edinburgh</td> 
          <td>22</td> 
          <td>2012/03/29</td> 
          <td>$433,060</td> 
      </tr> 
      <tr> 
          <td>Airi Satou</td> 
          <td>Accountant</td> 
          <td>Tokyo</td> 
          <td>33</td> 
          <td>2008/11/28</td> 
          <td>$162,700</td> 
      </tr> 
      <tr> 
          <td>Brielle Williamson</td> 
          <td>Integration Specialist</td> 
          <td>New York</td> 
          <td>61</td> 
          <td>2012/12/02</td> 
          <td>$372,000</td> 
      </tr> 
      <tr> 
          <td>Herrod Chandler</td> 
          <td>Sales Assistant</td> 
          <td>San Francisco</td> 
          <td>59</td> 
          <td>2012/08/06</td> 
          <td>$137,500</td> 
      </tr> 
      <tr> 
          <td>Rhona Davidson</td> 
          <td>Integration Specialist</td> 
          <td>Tokyo</td> 
          <td>55</td> 
          <td>2010/10/14</td> 
          <td>$327,900</td> 
      </tr> 
      <tr> 
          <td>Colleen Hurst</td> 
          <td>Javascript Developer</td> 
          <td>San Francisco</td> 
          <td>39</td> 
          <td>2009/09/15</td> 
          <td>$205,500</td> 
      </tr> 
      <tr> 
          <td>Sonya Frost</td> 
          <td>Software Engineer</td> 
          <td>Edinburgh</td> 
          <td>23</td> 
          <td>2008/12/13</td> 
          <td>$103,600</td> 
      </tr> 
      <tr> 
          <td>Jena Gaines</td> 
          <td>Office Manager</td> 
          <td>London</td> 
          <td>30</td> 
          <td>2008/12/19</td> 
          <td>$90,560</td> 
      </tr> 
      <tr> 
          <td>Quinn Flynn</td> 
          <td>Support Lead</td> 
          <td>Edinburgh</td> 
          <td>22</td> 
          <td>2013/03/03</td> 
          <td>$342,000</td> 
      </tr> 
      <tr> 
          <td>Charde Marshall</td> 
          <td>Regional Director</td> 
          <td>San Francisco</td> 
          <td>36</td> 
          <td>2008/10/16</td> 
          <td>$470,600</td> 
      </tr> 
      <tr> 
          <td>Haley Kennedy</td> 
          <td>Senior Marketing Designer</td> 
          <td>London</td> 
          <td>43</td> 
          <td>2012/12/18</td> 
          <td>$313,500</td> 
      </tr> 
      <tr> 
          <td>Tatyana Fitzpatrick</td> 
          <td>Regional Director</td> 
          <td>London</td> 
          <td>19</td> 
          <td>2010/03/17</td> 
          <td>$385,750</td> 
      </tr> 
      <tr> 
          <td>Michael Silva</td> 
          <td>Marketing Designer</td> 
          <td>London</td> 
          <td>66</td> 
          <td>2012/11/27</td> 
          <td>$198,500</td> 
      </tr> 
      <tr> 
          <td>Paul Byrd</td> 
          <td>Chief Financial Officer (CFO)</td> 
          <td>New York</td> 
          <td>64</td> 
          <td>2010/06/09</td> 
          <td>$725,000</td> 
      </tr> 
      <tr> 
          <td>Gloria Little</td> 
          <td>Systems Administrator</td> 
          <td>New York</td> 
          <td>59</td> 
          <td>2009/04/10</td> 
          <td>$237,500</td> 
      </tr> 
      <tr> 
          <td>Bradley Greer</td> 
          <td>Software Engineer</td> 
          <td>London</td> 
          <td>41</td> 
          <td>2012/10/13</td> 
          <td>$132,000</td> 
      </tr> 
      <tr> 
          <td>Dai Rios</td> 
          <td>Personnel Lead</td> 
          <td>Edinburgh</td> 
          <td>35</td> 
          <td>2012/09/26</td> 
          <td>$217,500</td> 
      </tr> 
      <tr> 
          <td>Jenette Caldwell</td> 
          <td>Development Lead</td> 
          <td>New York</td> 
          <td>30</td> 
          <td>2011/09/03</td> 
          <td>$345,000</td> 
      </tr> 
      <tr> 
          <td>Yuri Berry</td> 
          <td>Chief Marketing Officer (CMO)</td> 
          <td>New York</td> 
          <td>40</td> 
          <td>2009/06/25</td> 
          <td>$675,000</td> 
      </tr> 
      <tr> 
          <td>Caesar Vance</td> 
          <td>Pre-Sales Support</td> 
          <td>New York</td> 
          <td>21</td> 
          <td>2011/12/12</td> 
          <td>$106,450</td> 
      </tr> 
      <tr> 
          <td>Doris Wilder</td> 
          <td>Sales Assistant</td> 
          <td>Sidney</td> 
          <td>23</td> 
          <td>2010/09/20</td> 
          <td>$85,600</td> 
      </tr> 
      <tr> 
          <td>Angelica Ramos</td> 
          <td>Chief Executive Officer (CEO)</td> 
          <td>London</td> 
          <td>47</td> 
          <td>2009/10/09</td> 
          <td>$1,200,000</td> 
      </tr> 
      <tr> 
          <td>Gavin Joyce</td> 
          <td>Developer</td> 
          <td>Edinburgh</td> 
          <td>42</td> 
          <td>2010/12/22</td> 
          <td>$92,575</td> 
      </tr> 
      <tr> 
          <td>Jennifer Chang</td> 
          <td>Regional Director</td> 
          <td>Singapore</td> 
          <td>28</td> 
          <td>2010/11/14</td> 
          <td>$357,650</td> 
      </tr> 
      <tr> 
          <td>Brenden Wagner</td> 
          <td>Software Engineer</td> 
          <td>San Francisco</td> 
          <td>28</td> 
          <td>2011/06/07</td> 
          <td>$206,850</td> 
      </tr> 
      <tr> 
          <td>Fiona Green</td> 
          <td>Chief Operating Officer (COO)</td> 
          <td>San Francisco</td> 
          <td>48</td> 
          <td>2010/03/11</td> 
          <td>$850,000</td> 
      </tr> 
      <tr> 
          <td>Shou Itou</td> 
          <td>Regional Marketing</td> 
          <td>Tokyo</td> 
          <td>20</td> 
          <td>2011/08/14</td> 
          <td>$163,000</td> 
      </tr> 
      <tr> 
          <td>Michelle House</td> 
          <td>Integration Specialist</td> 
          <td>Sidney</td> 
          <td>37</td> 
          <td>2011/06/02</td> 
          <td>$95,400</td> 
      </tr> 
      <tr> 
          <td>Suki Burks</td> 
          <td>Developer</td> 
          <td>London</td> 
          <td>53</td> 
          <td>2009/10/22</td> 
          <td>$114,500</td> 
      </tr> 
  </tbody> 
</table> 
 
<div class="btns-block"> 
  <a class="btn-prev" href="#close">Prev</a> 
  <a class="btn-next" href="#close">Next</a> 
 
</div>

Answer 2

Здравствуйте!

Берем начальный массив var order = [ 0, 1, 2, 3, 4, 5 ].
Как я понимаю вам нужно при нажатие кнопки next, чтобы массив стал таким var order = [ 5, 0, 1, 2, 3, 4 ] и т.д.
Это можно реализовать так - при нажатие кнопки удаляем последний элемент и добавляем в начало массива.

order.unshift(order.pop());

Затем уже можно использовать это массив:

table.colReorder.order( order );

Ну для кнопки назад можно сделать по аналогий(удаляем из начала массива и добавляем в конец).

READ ALSO
Dependency injection как можно сделать лучше?

Dependency injection как можно сделать лучше?

В общем делаю как то так, думаю как сделать так чтобы можно было обратиться к существующему объекту

182
Адаптивность JS

Адаптивность JS

Есть меню-сендвич, который выезжал вниз на контент, чтобы этого не случилось при клике на меню добавил padding-top у этого самого контентаВстал...

239
&lt;Input type=&#39;file&#39;/&gt; и Microsoft Edge

<Input type='file'/> и Microsoft Edge

Имеется компонент, отвечающий за выбор файловВот часть кода:

214
TypeError: dest.on is not a function?

TypeError: dest.on is not a function?

Решил добавить несколько плагинов для gulp, но после их установки и внесения изменений в gulpfile стало выбивать ошибку TypeError: deston is not a function

491