Цитата:
Цитата:
|
А можно ли сделать чтоб поиск шел не по <tbody> , а допустим по какому либо другому тегу <table>?
|
Цитата:
|
Я и спрашиваю есть ли такая возможность?)
У меня стоит фильтр по буквам "А-Я", который работает по <tfoot> и числовой фильтр, который по <tbody>, но вместе эти теги конфликтуют и не получается задействовать сразу два фильтра |
denis_kontarev,
не понимаю. |
Попробую подробно описать.
Первый фильтр делает поиск по тегу <tfoot> введенные буквы (слова) и при совпадении оставляет нужную информацию. ![]() $(document).ready(function(){ $("#teams_filter").keyup(function(){ _this = this; $.each($("#table_search tfoot"), function() { if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1) $(this).hide(); else $(this).show(); }); }); }); <tfoot>.......</tfoot> <tfoot>.......</tfoot> <tfoot>.......</tfoot> А второй фильтр сортирует таблицу по числовому значению от меньшего к большему по тегу <tbody> 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) }) Так вот как сделать чтоб фильтр начинал поиск не по <tbody>, а по тегу <table> ![]() Так как вместе эти фильтры конфликтуют и работает только один из них. |
denis_kontarev,
сделайте макет, структуру вашей таблицы, с минимумом данных, только для примера. |
<input type="text" id="teams_filter" placeholder="Поиск по таблице"> <table class="proanaliz-table tsort" id="table_search"> <thead> <tr> <th class="sort">Начало</th> <th class="sort">Команды</th> <th class="sort">1</th> <th class="sort">X</th> <th class="sort">2</th> <th class="sort">TIP</th> </tr> </thead> <tfoot> <tr> <td>01:00</td> <td>>Спортиво Лукеньо - Депортиво Сантани</td> <td>2.63</td> <td>3.24</td> <td>2.99</td> </tr> <tr> <td colspan="6"> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию</span></a> <div class="spoiler-block"> <table class="proanaliz-table"> <tr> <td>04:00</td> <td>>Палмейрас - ЦСА</td> <td>1.19</td> <td>2.56</td> <td>3.98</td> </tr> </table> </div> </td> </tr> </tfoot> </table> |
сортировка и фильтрация tfoot table
denis_kontarev,
<!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: "▲" } tfoot.hide{ display: none; } .spoiler-trigger + div { display: none; } .spoiler-trigger.open + div { display: block; } </style> <script> document.addEventListener('DOMContentLoaded', () => { const table = document.querySelector('.tsort'); const ArrayTfoot = [...table.querySelectorAll('tfoot')]; 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.querySelector('tr').children[index].innerHTML, b.querySelector('tr').children[index].innerHTML); ArrayTfoot.sort(comparator(index, order)); table.append(...ArrayTfoot); for (const cell of target.parentNode.cells) cell.classList.toggle("sorted", cell === target); }; document.querySelector('.tsort thead').addEventListener('click', getSort); const inputFilter = document.querySelector('#teams_filter'); inputFilter.addEventListener('input', () => ArrayTfoot.forEach(tfoot => { const text = tfoot.textContent.toLowerCase(), val = inputFilter.value.trim().toLowerCase(), hide = val && text.indexOf(val) === -1; tfoot.classList.toggle('hide', hide) })) document.addEventListener('click', event => { const target = event.target.closest('.spoiler-trigger'); if(target) { event.preventDefault(); target.classList.toggle('open') } }) }) </script> </head> <body> <input type="text" id="teams_filter" placeholder="Поиск по таблице"> <table class="proanaliz-table tsort" id="table_search"> <thead> <tr> <th class="sort">Начало</th> <th class="sort">Команды</th> <th class="sort">1</th> <th class="sort">X</th> <th class="sort">2</th> <th class="sort">TIP</th> </tr> </thead> <tfoot> <tr> <td>01:00</td> <td>>Спортиво Лукеньо - Депортиво Сантани</td> <td>2.63</td> <td>3.24</td> <td>2.99</td> </tr> <tr> <td colspan="6"> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию</span></a> <div class="spoiler-block"> <table class="proanaliz-table"> <tr> <td>04:00</td> <td>>Палмейрас - ЦСА</td> <td>1.19</td> <td>2.56</td> <td>3.98</td> </tr> </table> </div> </td> </tr> </tfoot> <tfoot> <tr> <td>08:00</td> <td>>индия</td> <td>2.63</td> <td>3.24</td> <td>2.99</td> </tr> <tr> <td colspan="6"> <a href="#" class="spoiler-trigger"><span>Открыть подробную информацию</span></a> <div class="spoiler-block"> <table class="proanaliz-table"> <tr> <td>04:00</td> <td>>Палмейрас - ЦСА</td> <td>1.19</td> <td>2.56</td> <td>3.98</td> </tr> </table> </div> </td> </tr> </tfoot> </table> </body> </html> |
Рони в очередной раз огромное спасибо!!!! Работает идеально!
|
Часовой пояс GMT +3, время: 21:38. |