Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Фильтрация блоков (https://javascript.ru/forum/jquery/68977-filtraciya-blokov.html)

Mracobes9 22.05.2017 05:53

Фильтрация блоков
 
Здравствуйте. Я столкнулся с такой проблемой: нужно сделать фильтр для блоков на сайте, который не вернет пустых результатов(т.е. неверные варианты дизейблятся). Бьюсь над этой проблемой 3 недели. Может быть кто-нибудь подскажет ?

j0hnik 22.05.2017 17:43

$(".item").each(function(){
	var item = $(this).html();
	if (item == false) {$(this).hide();}
});


Вот фильтр!
только Блоки не дизейблятся, дизейблятся инпуты.
Блоки можно скрыть или стилизовать серым под дизейбл.

laimas 22.05.2017 18:01

j0hnik,
все это можно описать одним выражением $('selector:empty').hide()

j0hnik 22.05.2017 19:15

Цитата:

Сообщение от laimas (Сообщение 453105)
j0hnik,
все это можно описать одним выражением $('selector:empty').hide()

Спасибо, буду знать.

laimas 22.05.2017 19:26

Цитата:

Сообщение от j0hnik
Спасибо, буду знать.

Сначала бы хорошо знать чего нужно автору, так как даже наличие одного пробела может смешать все карты. )

Mracobes9 22.05.2017 23:44

Цитата:

Сообщение от laimas
Сначала бы хорошо знать чего нужно автору,

Нужно следующее: есть блоки и фильтр, который представляет собой три столбца чекбоксов, соответствующих трем критериям. Нужно при нажатии на один из них дизейбелить те, при нажатии на который будет выдан пустой результат

Mracobes9 22.05.2017 23:44

Как пример яндекс маркет

laimas 23.05.2017 00:06

Это не проясняет ситуации чего надо. А чтобы проясняло, нужен html-код, а не гадание на кофейной гуще.

Если фильтр для вывода товаров, то выбор фильтра, это запрос сервер->база, который не вернет среди нужно и пустое (если конечно на сервере код не кривой).

Если фильтр, это для рекомендуемых (похожих и т.п.) товаров, которые выводятся на страницу описания товара, то они выводятся также в результате запроса к БД. Откуда и в этом случае могут быть пустые? Здесь изначально могут отображаться все, а выбор элемента фильтра показывает только те рекомендуемые, которые связаны с выбранным элементом.

Mracobes9 23.05.2017 00:45

Вложений: 1
товары статичные, т.е. представлены набором div. Работа с сервером не подразумевается

laimas 23.05.2017 01:02

Говорят статичная страница. Не злоуботребляйте терминами не имеющими отношения к вопросу - что на вашей странице "пустое"?

Смотрите это - https://isotope.metafizzy.co/

Mracobes9 23.05.2017 01:08

Вложений: 1
сейчас ничего, потому что это только html. Вот полный сайт

laimas 23.05.2017 01:20

Я не стану смотреть ваш "полный сайт". А "пустоты" не должно быть на страницах в любом случае, хоть динамический он, хоть статичный.

Фильтрация, это по ссылке. Читайте документацию плагина, смотрите примеры, подключайте, используйте.

Mracobes9 23.05.2017 01:25

Спасибо, но с плагином не вариант

laimas 23.05.2017 01:43

А с чем вариант?

Mracobes9 23.05.2017 01:51

Вариант сделать его самому на js и jquery

laimas 23.05.2017 02:02

Ну так в чем проблема, делайте.

j0hnik 23.05.2017 04:07

Фильтр
$("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>

и будет счастье.

Mracobes9 23.05.2017 17:51

Цитата:

Сообщение от laimas
Ну так в чем проблема, делайте.

Как я писал ранее, я пытался и именно потому, что у меня ничего не вышло кроме обычной фильтрации блоков с пустыми результатами, я написал сюда в надежде получить ценный совет
Цитата:

Сообщение от j0hnik
Фильтр

Спасибо вам за код, но к сожалению это не совсем то что мне нужно. А нужно сделать так чтобы во время фильтрации отключались те чекбоксы которые приведут к пустому результату

laimas 23.05.2017 18:05

Цитата:

Сообщение от Mracobes9
я пытался и именно потому, что у меня ничего не вышло

И где результаты ваших попыток? Вам был предложен плагин, который был отвергнут по причине "хочется свое". Хорошо, пишите свое, и коли свое, то показывайте код и его проблемы.

Предложенный плагин базируется на простом - элементы управления фильтром в атрибуте содержат стили элемента, только которые и будут отображаться на странице при их выборе.

У вас же некие флажки, с некими значениями. Что значит фильтрация в данном случае? Показывайте код, поясняйте что и как, и что за проблемы.

Mracobes9 23.05.2017 19:29

Цитата:

Сообщение от laimas
Показывайте код, поясняйте что и как, и что за проблемы.

Код я скинул выше, но вы написали
Цитата:

Сообщение от laimas
Я не стану смотреть ваш "полный сайт".

Если это вам не подходит, то чего вы еще от меня ждете.
Цитата:

Сообщение от laimas
Вам был предложен плагин, который был отвергнут по причине "хочется свое"

Не хочется, а таково задание,которое мне необходимо сделать. Если бы можно было использовать плагин, я бы здесь не писал.

laimas 23.05.2017 19:38

Цитата:

Сообщение от Mracobes9
Если это вам не подходит, то чего вы еще от меня ждете.

Я ничего не жду, это вы ожидаете помощи на пустом месте. :)

Смотреть весь ваш сайт, и что-то писать, так это платная работа. Код одной страницы, это html-код с подключениями неких сценариев. И если вы писали некие сценарии в попытках что-то фильтровать, то приведите часть html-кода, ваш JS код фильтрации и поясните что к чему. Иначе возможно долго будете ожидать помощи, если только дождетесь. Не каждый захочет скачивать ваш код, а задавать вопросы здесь, чтобы решить проблему.

Можно же на страницах форума в кратком изложении отобразить суть или это невозможно?

j0hnik 23.05.2017 21:45

Цитата:

Сообщение от Mracobes9 (Сообщение 453216)
Спасибо вам за код, но к сожалению это не совсем то что мне нужно. А нужно сделать так чтобы во время фильтрации отключались те чекбоксы которые приведут к пустому результату

да это не проблема
$("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});
     }
 });

j0hnik 23.05.2017 22:38

$(".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 не содержит строку...

Mracobes9 24.05.2017 00:23

Цитата:

Сообщение от j0hnik
Вот так будет работать с вашим кодом, только точки из value чекбоксов поубирайте.

Спасибо большое за помощь)

j0hnik 24.05.2017 02:51

Цитата:

Сообщение от Mracobes9 (Сообщение 453237)
Спасибо большое за помощь)

переписал по феншую, теперь в HTML ничего трогать не надо! даже точки.
$("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.