Сортировка таблицы при условии
Всем привет друзья. Есть таблица и код сортировки таблицы.
(function($){ $.fn.tsort=function(){ var v=function(e,i){return $(e).children('td').eq(i).text()}, c=function(i){return function(a,b){var k=v(a,i),m=v(b,i);return $.isNumeric(k)&&$.isNumeric(m)?k-m:k.localeCompare(m)}}; this.each(function(){ var th=$(this).children('thead').first().find('tr > th'), tb=$(this).children('tbody').first(); th.click(function(){ var r=tb.children('tr').toArray().sort(c($(this).index())); th.removeClass('sel'),$(this).addClass('sel').toggleClass('asc'); if($(this).hasClass('asc'))r=r.reverse(); for(var i=0;i<r.length;i++)tb.append(r[i]) }) }) } })(jQuery); $( document ).ready(function() { $('.tsort').tsort(); }); Наша таблица. В ней мы видим основную информацию и информацию, которая спрятана спойлером. Это связанная информация. При сортировки мы теряем этот спойлер и все скидывается в одну кучу. <table class="tsort"> <thead> <tr> <th>Начало</th> <th>Команды</th> <th>1</th> <th>X</th> <th>2</th> <th>TIP</th> </tr> </thead> <tbody> <tr> <td>00:30</td> <td>Боливия</td> <td>1.69</td> <td>3.74</td> <td>4.12</td> </tr> <tr> <td> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию</span></a> <div class="spoiler-block"> <table> <tbody> <tr> <td>Ф(-1)</td> <td>Ф(+1)</td> </tr> <tr> <td>1</td> <td>X</td> <td>2</td> <td>1</td> <td>X</td> <td>2</td> </tr> <tr> <td>2.62</td> <td>4.00</td> <td>2.00</td> </tr> </tbody> </table> </table> Получается так! ![]() А должно быть как единый блок! ![]() Прошу вас помогите. Как сделать сортировку по столбцам 1 Х 2 от меньшего к большему. Благодарю. |
denis_kontarev,
html уточните, теги закройте и добавьте вторую команду. |
сортировка таблицы парные строки
denis_kontarev,
вариант на основе кода от Malleys https://codepen.io/Malleys/pen/dQGMbP?editors=0010 https://javascript.ru/forum/misc/758...tml#post498107 <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,500,500i,700'); body { font-family: Roboto; } table { border-collapse: collapse } td, th { border: 2px solid red; width: 150px; height: 40px; text-align: center; } th { cursor: pointer; user-select: none; } th.sorted[data-order="-1"]::after { content: "▼" } th.sorted[data-order="1"]::after { content: "▲" } </style> <script> document.addEventListener('DOMContentLoaded', () => { const getSort = ({ target }) => { const order = target.dataset.order = -(target.dataset.order || -1); const index = [...target.parentNode.cells].indexOf(target); const collator = new Intl.Collator(["en", "ru"], { numeric: true }); const comparator = (index, order) => (a, b) => order * collator.compare( a.children[index].innerHTML, b.children[index].innerHTML); const tBody = target.closest("table").tBodies[0]; let trs = [...tBody.rows].filter((el, i) => i % 2 == 0); trs.sort(comparator(index, order)); trs.forEach(el => { const next = el.nextElementSibling; tBody.append(...[el,next]) }); for (const cell of target.parentNode.cells) cell.classList.toggle("sorted", cell === target); }; document.querySelector('.tsort thead').addEventListener('click', getSort) }) </script> </head> <body> <table class="tsort"> <thead> <tr> <th>Начало</th> <th>Команды</th> <th>1</th> <th>X</th> <th>2</th> <th>TIP</th> </tr> </thead> <tbody> <tr> <td>00:30</td> <td>Боливия</td> <td>1.69</td> <td>3.74</td> <td>4.12</td> </tr> <tr> <td> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию боливия</span></a> <div class="spoiler-block"> <table> <tbody> <tr> <td>Ф(-1)</td> <td>Ф(+1)</td> </tr> <tr> <td>1</td> <td>X</td> <td>2</td> <td>1</td> <td>X</td> <td>2</td> </tr> <tr> <td>2.62</td> <td>4.00</td> <td>2.00</td> </tr> </tbody> </table> </tr> <tr> <td>00:50</td> <td>Индия</td> <td>0.69</td> <td>63.74</td> <td>2.12</td> </tr> <tr> <td> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию индия</span></a> <div class="spoiler-block"> <table> <tbody> <tr> <td>Ф(-1)</td> <td>Ф(+1)</td> </tr> <tr> <td>1</td> <td>X</td> <td>2</td> <td>1</td> <td>X</td> <td>2</td> </tr> <tr> <td>2.62</td> <td>4.00</td> <td>2.00</td> </tr> </tbody> </table> </tr> </tbody> </table> </body> </html> |
Благодарю Рони! Работает идеально!!! :dance:
|
Часовой пояс GMT +3, время: 18:32. |