Цитата:
Цитата:
|
А можно ли сделать чтоб поиск шел не по <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, время: 19:53. |