Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Js-скрипт «живого» поиска по сайту для ucoz

Тема в разделе "Скрипты для Ucoz", создана пользователем iCooLER, 26 июн 2017.

26.06.17 в 07:51
27.06.17 в 07:19
49
9.002
4
  1. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    JbhwzB1cmF.gif

    Давненько как-то написал JS-скрипт «живого» поиска по сайту для uCoz. К примеру, как в Яндекс — вы вбиваете запрос, а он уже выдал вам результат и обновляет по мере, того как вы продолжаете вводить свой запрос.

    — Скрипт работает на всех модулях и страницах.
    — Автоматически определят по какому модулю нужно искать.
    — Автоматически цепляется к любым формам поиска на странице сайта.
    — Легко устанавливается, также просто можно убрать скрипт.
    — Можно прописать стили и видоизменить результаты поиска под стиль вашего сайта.

    Ниже привожу код скрипта, а чтобы установить живой поиск на сайт достаточно подключить скрипт перед тегом </body> на всех страницах сайта.
    HTML:
    var liveSearch = {
    
        init: function() {
    
            // цепляемся за форму поиска
            $('form[action] input[name]').keyup(function() {
                var search = $(this),
                    form = $(this).closest('form'),
                    query = $(this).val(),
                    action = form.attr("action"); 
    
                $('.search-live').remove();          
                if ( form.attr("id") == 'addEntForm' || query.length < 3 ) return false;
    
                if ( /search|dir|publ|load|news|stuff|blog|video|photo/.test(action) === true ) {
                    $.ajax({
                       url: action + '?q=' + query,
                       type: 'POST',
                       data: {query: query, a: 2},
                       success: function(data) { liveSearch.insert( data, query, search ) },
                   });             
                }
            });
    
        },
    
        insert: function(data, query, search) {
    
            var request = '', query_exp;
    
            $('a[href]', data).each(function(index, link){
                query_exp = new RegExp(query);
                if( query_exp.test( $(this).text() ) == true )
                    request += '<a href="' + $(this).attr('href') + '" class="search-live-item">' + $(this).text() + '</a>';
            });         
    
            if ( request.length == 0 ) request = '<a href="" class="search-live-item">Ничего не найдено!</a>';
    
            $('body').prepend('<div class="search-live">' + request + '</div>');
    
            $('.search-live').css({
                'width' : search.outerWidth(),
                'position' : 'absolute',
                'top' : search.offset().top + search.outerHeight(),
                'left' : search.offset().left,
                'z-index' : '100001',
                'box-sizing' : 'border-box'
            });
    
            $('.search-live .search-live-item').css({
                'display' : 'block',
                'width' : '100%',
                'height' : '40px',
                'overflow' : 'hidden',
                'background' : '#000',
                'color' : '#fff',
                'line-height' : '40px',
                'text-indent' : '20px',
                'text-decoration' : 'none',
                'border-bottom' : '1px solid #ccc',
                'text-align' : 'left',
                'box-sizing' : 'border-box' 
            });
    
        }
    
    }
    
    $(document).ready(function() {
        liveSearch.init(); // запуск «живого» поиска
    });
    

    Чтобы настроить внешний вид результатов поиска, нужно прописать стили в блоке — в самом конце скрипта:
    HTML:
    $('.search-live .search-live-item').css({
                'display' : 'block',
                'width' : '100%',
                'height' : '40px',
        // вы можете добавить любые стили в скрипт, либо прописать стили в вашем фаиле CSS
    });
    
    Благодарность LisER07 за указание на ошибки!
     
    #1 iCooLER, 26 июн 2017
    Последнее редактирование: 27 июн 2017
    • Нравится Нравится x 4
    • Лучший Лучший x 2
    • Полезно Полезно x 1
  2. kinouser

    PRO Users

    Регистрация:
    12 ноя 2015
    Сообщения:
    949
    Лучших ответов:
    0
    Рейтинги:
    +230 / 23 / -0
    @iCooLER,молодец ,спасибо,но может всё таки хоть какое никакое демо ещё показывать,было бы огонь вообще...
     
  3. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    вопрос, почему error пусто ?
    Код:
    error: function($data) {
    
    } 
    второй вопрос
    нахрена $(this) засунул в переменную когда пишешь так
    Код:
       var $input = $(this),
           $query = $(this).val(),
    нельзя было $query = $input.val() ?
     
  4. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    1. error просто не удалял, думал допилить наверно.
    2. var $input = $(this) — долго объяснять, но так уж сделано.

    Вообще это было месяца 4-5 назад, я тогда в js плохо шарил, только учился... Второй пункт обоснован, но объяснять не буду (сам знаю, что можно все это сделать грамотнее).
     
    • Нравится Нравится x 1
  5. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    третий вопрос, одним ajax запросом нельзя было ?
     
  6. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    Блин, я не хочу грубить и встревать в перепалку... но разуй глаза plz! :)

    ----
    error: function($data) — это я не убрал тупо, чтобы потом не прописывать заново, если буду делать, и чтобы у меня был где-то шаблон данной функции со всеми параметрами
    ----
    $input = $(this) — проследи всю цепочку действий/событий в скрипте, хотя тут все не совсем очевидно конечно...
    ----
    одним ajax запросом нельзя было ? — где ты видишь два ajax Запроса? а если ты и видишь что-то, то это два РАЗНЫХ ajax запроса. видишь ли, в поиске по модулям, и в поиске по всему сайту есть различия :)
     
    • Нравится Нравится x 1
  7. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    Добавил gif анимашку. А скрипт пожалуй обновлю слегка на днях, т.к. нужно преодолеть различия на сайтах и заставить это работать лучше :)
     
  8. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    тогда скажи, что ты этим кодом пытался сделать $action.match('search|dir|publ|load|news|stuff|blog|video|photo') ? проверить что там есть эти значении ? или вырезать их ? или что ?
     
  9. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    LisER07, хочешь сказат
    .match() — Выполняет поиск по строке с использованием регулярного выражения и возвращает массив, содержащий результаты поиска.
     
  10. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    как это код прокомментируешь ?
    Код:
       if ($query.length >= 3 && $action.match('search|dir|publ|load|news|stuff|blog|video|photo')) {
    
           if ($action.match('search')) {
               $.ajax({
                   url: $action + '?q=' + $query,
    вернул массив - $action.match('search|dir|publ|load|news|stuff|blog|video|photo')
    еще раз вернул массив - $action.match('search')
    и в итоге просто строку впихнул в запрос
     
  11. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    Ты уже прокомментировал каждую строчку — мои комментарии будут излишними.
     
  12. bezzubenko

    Забанен

    Регистрация:
    28 мар 2017
    Сообщения:
    19
    Лучших ответов:
    0
    Рейтинги:
    +3 / 0 / -0
    LisER07, зачем показывать какой ты умный, человек учится и что то выложил свое, лучше подсказать ошибки, а не мерится у кого длинее, позор...
     
    • Нравится Нравится x 2
  13. kinouser

    PRO Users

    Регистрация:
    12 ноя 2015
    Сообщения:
    949
    Лучших ответов:
    0
    Рейтинги:
    +230 / 23 / -0
    LisER07 ты видать из разряда тех - "я умный,ты тупой,я знаю,ты нет,но делать нихера не буду - ебитесь сами :D" знаю таких - часто вижу их.Видишь же тему - взял бы чего своего предложил,форум тем и живёт же ;)
     
    • Нравится Нравится x 3
    • Согласен Согласен x 1
  14. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    Я не показываю какой я умный, я подсказал человеку что там ошибки а он не понял )
     
  15. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    В данном коде нет ошибок! Да, в чем-то его можно доработать и будет более грамотно сделано, но ошибок там нет. Ты просто не прослеживаешь всю цепочку действий — что и как делается. Попробуй сам напиши и мы вместе посмотрим на твой результат :) Да, он может быть будет лучше, а может и наоборот — но ты для начала сделай =)

    Или по-другому — ты якобы указал на мой ошибки. Если ты там нашел ошибки, то видимо ты знаешь как их исправить? Попробуй убери для начала ошибочную по твоему строку —
    $input = $(this) и ты увидишь, что будет :)
     
  16. Juker7

    Команда форума VIP Кинотрафик v2

    Регистрация:
    27 окт 2016
    Сообщения:
    525
    Лучших ответов:
    0
    Рейтинги:
    +266 / 4 / -0
    Gameer (liser) versus DomiTori (icooler), version 2.0.
    Ready.
    Go!
     
    • Лучший Лучший x 2
    • Нравится Нравится x 1
  17. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    А ты самый умный в сторонке стоишь и наблюдаешь? :)
     
    • Согласен Согласен x 2
  18. Juker7

    Команда форума VIP Кинотрафик v2

    Регистрация:
    27 окт 2016
    Сообщения:
    525
    Лучших ответов:
    0
    Рейтинги:
    +266 / 4 / -0
    Прости брат, это не моя война)
     
  19. TopicStarter Overlay
    iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    ... кто побеждает? o_O
     
  20. LisER07

    VIP Кинотрафик v2 Кодер

    Регистрация:
    4 окт 2015
    Сообщения:
    630
    Лучших ответов:
    2
    Рейтинги:
    +116 / 3 / -0
    я так понял ты тут пытался проверить если вот эти значения в строке
    Код:
    if ($query.length >= 3 && $action.match('search|dir|publ|load|news|stuff|blog|video|photo')) {
    
    теперь вопрос, ты получить массив со значениями, и что дальше с ними делал ?
     
Похожие темы
  1. Thor
    Ответов:
    15
    Просмотров:
    4.140
Загрузка...
Яндекс.Метрика