Фильтрация блоков
Здравствуйте. Я столкнулся с такой проблемой: нужно сделать фильтр для блоков на сайте, который не вернет пустых результатов(т.е. неверные варианты дизейблятся). Бьюсь над этой проблемой 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, время: 11:15. |