Фильтрация блоков
Здравствуйте. Я столкнулся с такой проблемой: нужно сделать фильтр для блоков на сайте, который не вернет пустых результатов(т.е. неверные варианты дизейблятся). Бьюсь над этой проблемой 3 недели. Может быть кто-нибудь подскажет ?
|
$(".item").each(function(){
var item = $(this).html();
if (item == false) {$(this).hide();}
});
Вот фильтр! только Блоки не дизейблятся, дизейблятся инпуты. Блоки можно скрыть или стилизовать серым под дизейбл. |
j0hnik,
все это можно описать одним выражением $('selector:empty').hide() |
Цитата:
|
Цитата:
|
Цитата:
|
Как пример яндекс маркет
|
Это не проясняет ситуации чего надо. А чтобы проясняло, нужен html-код, а не гадание на кофейной гуще.
Если фильтр для вывода товаров, то выбор фильтра, это запрос сервер->база, который не вернет среди нужно и пустое (если конечно на сервере код не кривой). Если фильтр, это для рекомендуемых (похожих и т.п.) товаров, которые выводятся на страницу описания товара, то они выводятся также в результате запроса к БД. Откуда и в этом случае могут быть пустые? Здесь изначально могут отображаться все, а выбор элемента фильтра показывает только те рекомендуемые, которые связаны с выбранным элементом. |
Вложений: 1
товары статичные, т.е. представлены набором div. Работа с сервером не подразумевается
|
Говорят статичная страница. Не злоуботребляйте терминами не имеющими отношения к вопросу - что на вашей странице "пустое"?
Смотрите это - https://isotope.metafizzy.co/ |
Вложений: 1
сейчас ничего, потому что это только html. Вот полный сайт
|
Я не стану смотреть ваш "полный сайт". А "пустоты" не должно быть на страницах в любом случае, хоть динамический он, хоть статичный.
Фильтрация, это по ссылке. Читайте документацию плагина, смотрите примеры, подключайте, используйте. |
Спасибо, но с плагином не вариант
|
А с чем вариант?
|
Вариант сделать его самому на js и jquery
|
Ну так в чем проблема, делайте.
|
Фильтр
$("input").change(function() {
var arr =[];
$("#content .unselected").show();
$("input:checkbox:checked").each(function(i) {
arr[i] = '.'+($(this).val());
});
for (var j=0; j<arr.length; j++) {
$("#content .unselected").not(""+arr[j]+"").hide();
}
});
Вставьте все нужные классы в айтемы <div id="three" class="unselected Desert Cheese 23122012"> и тут value без точек или через регулярки, я в них не силен. <label><input type="checkbox" value="23122012">23 December</label> и будет счастье. |
Цитата:
Цитата:
|
Цитата:
Предложенный плагин базируется на простом - элементы управления фильтром в атрибуте содержат стили элемента, только которые и будут отображаться на странице при их выборе. У вас же некие флажки, с некими значениями. Что значит фильтрация в данном случае? Показывайте код, поясняйте что и как, и что за проблемы. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Смотреть весь ваш сайт, и что-то писать, так это платная работа. Код одной страницы, это html-код с подключениями неких сценариев. И если вы писали некие сценарии в попытках что-то фильтровать, то приведите часть html-кода, ваш JS код фильтрации и поясните что к чему. Иначе возможно долго будете ожидать помощи, если только дождетесь. Не каждый захочет скачивать ваш код, а задавать вопросы здесь, чтобы решить проблему. Можно же на страницах форума в кратком изложении отобразить суть или это невозможно? |
Цитата:
$("input").change(function() {
var arr =[];
var arr2 =[];
$(".filter input").prop({disabled: true});
$("#content > *").show();
$("input:checkbox:checked").each(function(i) {
arr[i] = '.'+($(this).val());
});
for (var j=0; j<arr.length; j++) {
$("#content .unselected").not(""+arr[j]+"").hide();
}
$("#content .unselected:visible").each(function(i) {
arr2[i] = ($(this).attr('class'));
});
var str = arr2.join(' ');
str = str.replace(/(^|\s+)unselected(?=\s+|$)/g, '');
arr2 = str.split(" ");
for (var n=0; n<arr2.length; n++) {
$('input[value="'+arr2[n]+'"' ).prop({disabled: false});
}
});
|
$(".searchinfo").each(function() {
var text = $(this).html();
text = text.replace(/[.]/g, "");
$(this).parent(".unselected").attr("class", "unselected"+" "+text);
});
$("input").change(function() {
var arr =[];
var arr2 =[];
$(".filter input").prop({disabled: true});
$("#content > *").show();
$("input:checkbox:checked").each(function(i) {
arr[i] = '.'+($(this).val());
});
for (var j=0; j<arr.length; j++) {
$("#content .unselected").not(""+arr[j]+"").hide();
}
$("#content .unselected:visible").each(function(i) {
arr2[i] = ($(this).attr('class'));
});
var str = arr2.join(' ');
str = str.replace(/(^|\s+)unselected(?=\s+|$)/g, '');
arr2 = str.split(" ");
for (var n=0; n<arr2.length; n++) {
$('input[value="'+arr2[n]+'"' ).prop({disabled: false});
}
});
Вот так будет работать с вашим кодом, только точки из value чекбоксов поубирайте. можно сразу получить текст у searchinfo и не добавлять классы, только надо переписать строку которая скрывает блоки не содержащие класс, на строку которая будет скрывать родителя searchinfo .unselected, если текст searchinfo не содержит строку... |
Цитата:
|
Цитата:
$("input").change(function() {
var arr =[];
var arr2 =[];
$(".filter input").prop({disabled: true});
$("#content .unselected").show();
$("input:checkbox:checked").each(function(i) {
arr.push($(this).val());
});
for (var j=0; j<arr.length; j++) {
$("p.searchinfo").not('p.searchinfo:contains("'+arr[j]+'")').parent(".unselected").hide();
}
$("p.searchinfo:visible").each(function(i) {
arr2.push($(this).html());
});
arr2 = arr2.join(' ').split(" ");
for (var n=0; n<arr2.length; n++) {
$('input[value="'+arr2[n]+'"' ).prop({disabled: false});
}
});
|
| Часовой пояс GMT +3, время: 02:53. |