JQuery показать/скрыть строки таблицы
Я хочу, чтобы показать/скрыть строки в таблице, используя jquery. В идеале я хочу иметь кнопки над таблицей для сортировки таблицы.
i.e [Показать строки с id: black] [Показать строки с id: white] [Показать все строки]
Я искал все, но не могу найти решение. Кто-нибудь знает, как я могу сделать это с помощью jquery и сделать его совместимым с браузером?
Спасибо (код ниже)
<table class="someclass" border="0" cellpadding="0" cellspacing="0" summary="bla bla bla">
<caption>bla bla bla</caption>
<thead>
<tr id="black">
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
</tr>
</thead>
<tbody>
<tr id="white">
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
</tr>
<tr id="black">
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
</tr>
</tbody>
Ответы
Ответ 1
Вместо этого измените свои черно-белые идентификаторы на классы (дублирующиеся идентификаторы недопустимы), добавьте 2 кнопки с соответствующими идентификаторами и сделайте следующее:
var rows = $('table.someclass tr');
$('#showBlackButton').click(function() {
var black = rows.filter('.black').show();
rows.not( black ).hide();
});
$('#showWhiteButton').click(function() {
var white = rows.filter('.white').show();
rows.not( white ).hide();
});
$('#showAll').click(function() {
rows.show();
});
<button id="showBlackButton">show black</button>
<button id="showWhiteButton">show white</button>
<button id="showAll">show all</button>
<table class="someclass" border="0" cellpadding="0" cellspacing="0" summary="bla bla bla">
<caption>bla bla bla</caption>
<thead>
<tr class="black">
...
</tr>
</thead>
<tbody>
<tr class="white">
...
</tr>
<tr class="black">
...
</tr>
</tbody>
</table>
Он использует метод filter()
[docs] для фильтрации строк с классом black
или white
(в зависимости от кнопки).
Затем он использует метод not()
[docs] для выполнения напротив фильтра, исключая ранее найденные строки black
или white
.
EDIT: Вы также можете передать селектор .not()
вместо ранее найденного набора. Он может работать лучше:
rows.not( `.black` ).hide();
// ...
rows.not( `.white` ).hide();
... или еще лучше, просто сохраните кешированный набор с самого начала:
var rows = $('table.someclass tr');
var black = rows.filter('.black');
var white = rows.filter('.white');
$('#showBlackButton').click(function() {
black.show();
white.hide();
});
$('#showWhiteButton').click(function() {
white.show();
black.hide();
});
Ответ 2
Функция фильтра не работала для меня вообще; возможно, более поздняя версия jquery не работает как версия, используемая в приведенном выше коде. Несмотря на; Я использовал:
var black = $('.black');
var white = $('.white');
Селектор найдет каждый элемент, классифицированный под черным или белым.
Функции кнопок остаются такими, как указано выше:
$('#showBlackButton').click(function() {
black.show();
white.hide();
});
$('#showWhiteButton').click(function() {
white.show();
black.hide();
});
Ответ 3
http://sandbox.phpcode.eu/g/corrected-b5fe953c76d4b82f7e63f1cef1bc506e.php
<span id="black_only">Show only black</span><br>
<span id="white_only">Show only white</span><br>
<span id="all">Show all of them</span>
<style>
.black{background-color:black;}
#white{background-color:white;}
</style>
<table class="someclass" border="0" cellpadding="0" cellspacing="0" summary="bla bla bla">
<caption>bla bla bla</caption>
<thead>
<tr class="black">
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
<th>Header Text</th>
</tr>
</thead>
<tbody>
<tr id="white">
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
</tr>
<tr class="black" style="background-color:black;">
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
<td>Some Text</td>
</tr>
</tbody>
<script>
$(function(){
$("#black_only").click(function(){
$("#white").hide();
$(".black").show();
});
$("#white_only").click(function(){
$(".black").hide();
$("#white").show();
});
$("#all").click(function(){
$("#white").show();
$(".black").show();
});
});
</script>