Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Фильтрация по текстовому полю (https://javascript.ru/forum/jquery/64434-filtraciya-po-tekstovomu-polyu.html)

fenix_63 10.08.2016 21:38

Фильтрация по текстовому полю
 
Всем привет! Народ, есть сайт: http://handmademania.ru/b2b/ Там я добавил текстовое поле в раздел "Мастер-классы" - поиск по мастер классам. Хочу, чтобы когда пользователь вводил текст, производился бы поиск по селектору .work-name элемента p , т.е. по названиям мастер-классов.

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

Помогите пожалуйста, как осуществить поиск по всем элементам класса .work-name ?

Исходный код прямо на этой же странице: http://handmademania.ru/b2b/

Пример брал вот отсюда: http://ruseller.com/lessons.php?rub=32&id=1055

В идеале конечно хочу получить результат как вот в этом демо-примере, оттуда же: http://ruseller.com/lessons/les1055/0000113.htm

рони 10.08.2016 21:57

Цитата:

Сообщение от fenix_63
а вот если потом вписать "Candy" -

как вписать?
Цитата:

Сообщение от fenix_63
то вообще ни одного элемента не будет найдено, т.к. искать будет только по 2-м из уже найденных.

с чего вы взяли что будет искать среди 2 ?

рони 10.08.2016 22:01

Цитата:

Сообщение от fenix_63
Исходный код прямо на этой же странице:

где именно?
и нафига стили тегу script?

рони 10.08.2016 22:30

fenix_63,
трафик огромный у сайта!!!
заменить ваш поиск на код ниже
$(".filterinput").on("input", function() {
    var search = $.trim(this.value).split(/\s+/);
    console.log(search);
    $("#list .work-name").each(function(indx, el) {
        var text = el.textContent.toUpperCase(),
            show = search.some(function(a) {
                return text.indexOf(a.toUpperCase()) >= 0
            });
        $(el).parents(".work")[show ? "slideDown" : "slideUp"]()
    })
});

fenix_63 10.08.2016 23:12

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


Часовой пояс GMT +3, время: 08:07.