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

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, время: 10:49.