Вместе с результатом выводить "категорию"(Поиск по таблице)
Привет, есть поиск по таблице:Ссылка на кодепен
При вводе текста, который соответствует тексту в таблице, все остальные строчки обрезаются. Суть в том, что по мимо обычных строчек, есть "категории"(строка на 4 колонки): <tr> <td colspan="4" style="text-align:center; text-decoration:underline;">Категория 1</td> </tr> Нужно что бы по мимо результатов, выводилась соответствующая результату категория, т.е строка на 4 колонки которая находится выше результата. Как нибудь это можно реализовать? Код:
$(document).ready(function() {
$(".search").keyup(function () {
var searchTerm = $(".search").val();
var listItem = $('.results tbody').children('tr');
var searchSplit = searchTerm.replace(/ /g, "'):containsi('")
$.extend($.expr[':'], {'containsi': function(elem, i, match, array){
return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
$(".results tbody tr").not(":containsi('" + searchSplit + "')").each(function(e){
$(this).attr('visible','false');
});
$(".results tbody tr:containsi('" + searchSplit + "')").each(function(e){
$(this).attr('visible','true');
});
var jobCount = $('.results tbody tr[visible="true"]').length;
$('.counter').text(jobCount + ' результат(ов)');
if(jobCount == '0') {$('.no-result').show();}
else {$('.no-result').hide();}
});
});
Разметка таблицы(Таблица на бутстрапе, но это не важно)
<div class="form-group pull-right">
<input type="text" class="search form-control" placeholder="What you looking for?">
</div>
<span class="counter pull-right"></span>
<table class="table table-hover table-bordered results">
<thead>
<tr>
<th>#</th>
<th class="col-md-5 col-xs-5">Name / Surname</th>
<th class="col-md-4 col-xs-4">Job</th>
<th class="col-md-3 col-xs-3">City</th>
</tr>
<tr class="warning no-result">
<td colspan="4"><i class="fa fa-warning"></i> No result</td>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Vatanay Özbeyli</td>
<td>UI & UX</td>
<td>Istanbul</td>
</tr>
<tr> <td colspan="4" style="text-align:center; text-decoration:underline;">Категория 1</td> </tr>
<tr>
<th scope="row">2</th>
<td>Burak Özkan</td>
<td>Software Developer</td>
<td>Istanbul</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Egemen Özbeyli</td>
<td>Purchasing</td>
<td>Kocaeli</td>
</tr>
<tr>
<th scope="row">4</th>
<td>Engin Kızıl</td>
<td>Sales</td>
<td>Bozuyük</td>
</tr>
</tbody>
</table>
|
Поиск по таблице
Cresis,
class="guide" для заголовков class="category" для категорий
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<style type='text/css'>
body {
font-family: Arial, Helvetica;
font-size: 12px;
}
table {
width: 500px;
}
tr {
height: 20px;
}
.guide {
text-decoration: underline;
text-align: center;
}
.hot {
border: 1px solid #f00;
background-color: #FFD480;
color: #000000;
}
.category {
background-color: #B0C4DE;
}
td {
border: #0000FF 1px solid;
}
</style>
<script>
$(function() {
$("input#search").on("input", function() {
var text = this.value.toLowerCase();
$("tr:not('.guide, .category') td").removeClass("hot").each(function(i, obj) {
if ($(obj).text().toLowerCase().indexOf(text) > -1 && text) $(obj).addClass("hot")
});
$("tr:not(.guide)").show().filter(function() {
var ok = $(this).is('.category');
return text && !$(".hot",ok ? $(this).nextUntil('.category'): this).length
}).hide()
var jobCount = $("tr").has('.hot').length;
$('.counter').text(jobCount + ' результат(ов)');
})
});
</script>
</head>
<body>
<input id="search" type="text"></input>
<span class="counter pull-right"></span>
<table>
<tr class="guide">
<td>First Name</td>
<td>Last Name</td>
<td>City</td>
<td>State</td>
</tr>
<tr class="category" > <td colspan="4" style="text-align:center; text-decoration:underline;">Категория 1</td> </tr>
<tr>
<td>Manix</td>
<td>Bolton</td>
<td>Merizo</td>
<td>Michigan</td>
</tr>
<tr>
<td>Azalia</td>
<td>Gallegos</td>
<td>Plainfield</td>
<td>Michigan</td>
</tr>
<tr class="category" > <td colspan="4" style="text-align:center; text-decoration:underline;">Категория 2</td> </tr>
<tr>
<td>Michael</td>
<td>Shaw</td>
<td>Rawlins</td>
<td>New Hampshire</td>
</tr>
<tr>
<td>Matthew</td>
<td>Parker</td>
<td>Chino Hills</td>
<td>Michigan</td>
</tr>
</table>
</body>
</html>
|
Оо, это великолепно! То, что нужно!
Огромное спасибо за понимание и отличное решение. А есть возможность прикрутить сюда счетчик и выдавать ошибку на подобии как в скрипте из шапки?
var jobCount = $('.results tbody tr[visible="true"]').length;
$('.counter').text(jobCount + ' результат(ов)');
if(jobCount == '0') {$('.no-result').show();}
else {$('.no-result').hide();}
});
|
Цитата:
|
Спасибо)
|
Извините, но можно еще чуть-чуть помощи...
Не могли бы Вы еще сделать так, что бы при совпадении с категорией, категория тоже выводилась? Например: категория "Замена молнии", вводим в поле "Замена молнии" и выводится категория со всеми пунктами под ней? Заранее спасибо! |
Cresis,
:-? |
Понял, спасибо еще раз)
|
| Часовой пояс GMT +3, время: 09:18. |