Статьи

14 плагинов jQuery Live Search

Поиск в режиме реального времени — это расширенная форма поиска, в которой используется технология AJAX для предоставления результатов или предложений в одном представлении. Это отличается от обычного поля ввода HTML, которому дают возможности автозаполнения от современного браузера, такого как Chrome, Firefox или Safari. Поиск в режиме реального времени часто представляет собой поле ввода, которое было запрограммировано для загрузки предложений из определенного набора данных.

6 июля 2017 : Эта статья была переписана с целью обновления списка плагинов и включения некоторых дополнительных библиотек, не являющихся jQuery.

Использование живого поиска в вашем приложении значительно повышает удобство использования вашего сайта. Какие бы серверные технологии вы не использовали — PHP, Java, Python, Ruby, — JavaScript — лучший выбор для реализации функции живого поиска на стороне клиента.

Прежде чем продолжить, я хотел бы отметить, что термин « живой поиск» немного двусмыслен. Там нет авторитетного определения для этого термина. Другие термины, которые часто используются для обозначения одного и того же, — автозаполнение и ввод вперед .

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

1. Ajax Live Search

Ajax Live Search

Первым в этом списке является удивительный плагин с открытым исходным кодом для поиска в реальном времени jQuery. Он хорошо документирован и отлично работает в Chrome, Firefox, Safari, Opera и IE8. Наиболее впечатляющей особенностью является то, что он может возвращать результаты в виде разбитой на страницы таблицы! Как это круто?

Вы можете узнать больше об этом по следующим ссылкам:

2. Семантический пользовательский интерфейс поиска компонента

Semantic-UI Поиск

Если вы в CSS-фреймворках, вы должны проверить Semantic UI . У них есть классный поисковый компонент, который позволяет очень легко реализовать живой поиск в ваших формах. Просто взгляните на этот пример кода:

HTML:

<div class="ui search">
  <input class="prompt" type="text" placeholder="Search GitHub...">
  <div class="results"></div>
</div>

JavaScript:

 $('.ui.search')
  .search({
    apiSettings: {
      url: '//api.github.com/search/repositories?q={query}'
    },
    fields: {
      results : 'items',
      title   : 'name',
      url     : 'html_url'
    },
    minCharacters : 3
  })
;

Это удивительно минимальный, но мощный. Если вы используете опцию настроек API, вы можете делать настройки, такие как группировка результатов по категориям!

Semnatic-UI Поиск Группировка Поиск

Semantic UI также поставляется в различных вариантах, специально созданных для React, Meteor, Ember и Angular. Проверьте их страницу интеграции для полного списка.

Чтобы узнать больше, перейдите по следующим ссылкам.

3. jQueryUI Автозаполнение

jQueryUI Автозаполнение

Это виджет jQuery, который является частью библиотеки пользовательского интерфейса jQuery . Сама библиотека представляет собой набор компонентов пользовательского интерфейса, эффектов и тем, созданных на основе jQuery.

Автозаполнение поставляется с несколькими шаблонами для обеспечения различных реализаций. Вот один из таких примеров:

HTML:

 <div class="ui-widget">
  <label for="birds">Birds: </label>
  <input id="birds">
</div>

<div class="ui-widget" style="margin-top:2em; font-family:Arial">
  Result:
  <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>

JavaScript:

 $( function() {
  function log( message ) {
    $( "<div>" ).text( message ).prependTo( "#log" );
    $( "#log" ).scrollTop( 0 );
  }

  $( "#birds" ).autocomplete({
    source: "search.php",
    minLength: 2,
    select: function( event, ui ) {
      log( "Selected: " + ui.item.value + " aka " + ui.item.id );
    }
  });
} );

Чтобы узнать больше, перейдите по следующим ссылкам:

4. DevBridge JQuery Автозаполнение

Devbridge Autocomplete

DevQridge jQuery AutoComplete — это крошечная библиотека JavaScript, которая позволяет вам превращать обычные поля ввода текста в поля предложений автозаполнения. Его API обширен и хорошо документирован, что позволяет вам выполнять множество различных конфигураций. Реализация довольно проста, посмотрите на этот пример:

HTML:

 <input type="text" name="country" id="autocomplete"/>

JavaScript (поиск AJAX):

 // AJAX Lookup
$('#autocomplete').autocomplete({
    serviceUrl: '/autocomplete/countries',
    onSelect: function (suggestion) {
        alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
    }
});

JavaScript (локальный поиск):

 var countries = [
   { value: 'Andorra', data: 'AD' },
   // ...
   { value: 'Zimbabwe', data: 'ZZ' }
];

$('#autocomplete').autocomplete({
    lookup: countries,
    onSelect: function (suggestion) {
        alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
    }
});

Чтобы узнать больше, перейдите по следующей ссылке:

5. EasyAutocomplete

EasyAutocomplete

EasyAutocomplete — это настраиваемый плагин jQuery для автозаполнения со всеми необходимыми функциями. Он поддерживает локальные и удаленные наборы данных в форматах JSON, XML и обычного текста. Он также поддерживает обработчики обратного вызова и некоторые стили по умолчанию.

Что отличает этот плагин, так это особенность их шаблонов . Шаблоны используются для определения представления результатов. Вы можете создать собственный шаблон или использовать один из доступных встроенных пресетов, которые включают в себя:

  • Шаблон описания
  • Значок справа / слева
  • Шаблон ссылки

Реализовать базовое автозаполнение с помощью этого плагина довольно просто, см. Следующий пример кода:

HTML:

 <input id="countries"/>

JavaScript:

 var options = {

  url: "resources/countries.json",

  getValue: "name",

  list: {
    match: {
      enabled: true
    }
  },

  theme: "square"
};

$("#countries").easyAutocomplete(options);

JSON:

 [
  {"name": "Afghanistan", "code": "AF"},
  {"name": "Aland Islands", "code": "AX"},
  {"name": "Albania", "code": "AL"},
  {"name": "Algeria", "code": "DZ"},
  {"name": "American Samoa", "code": "AS"}
 ]

Чтобы узнать больше, перейдите по следующей ссылке:

6. PixaBay jQuery-autoComplete

Pixabay Автозаполнение

Pixabay.com, бесплатный фондовый сайт, имеет замечательный плагин jQuery для автозаполнения с открытым исходным кодом, который вы можете использовать для своего проекта. Первоначально они использовали jQuery Autocomplete DevBridge (№ 4 в списке). Позже они создали вилку и начали обновлять ее в соответствии со своими потребностями. В конце концов, они так много взломали в исходном коде, что у них появился собственный сверхлегкий оптимизированный плагин.

Плагин сжат только на 1,4 КБ с поддержкой нескольких источников данных, обратных вызовов и имеет интеллектуальную систему кэширования. Вот пример реализации плагина:

JavaScript:

 $('input[name="q"]').autoComplete({
  source: function(term, response){
    $.getJSON('/some/ajax/url/', { q: term }, function(data){ response(data); });
  }
});

Чтобы узнать больше, перейдите по следующим ссылкам:

7. Марко Поло

Марко Поло

Это плагин jQuery для автозаполнения, который был разработан из-за отсутствия надежных плагинов для автозаполнения в то время. Он содержит качественную документацию , кеширование, выбор памяти, пользовательские стили, обработку обратных вызовов и поддержку WAI-ARIA. Это требует jQuery v1.4.3 или выше и поддерживает все современные браузеры (и даже IE6!).

Реализация Марко Поло довольно проста. Вот пример реализации:

HTML:

 ...
<head>
  <script src="jquery.min.js"></script>
  <script src="jquery.marcopolo.min.js"></script>
</head>
...
<body>
  <input type="text" name="userSearch" id="userSearch">
</body>

JavaScript:

 $('#userSearch').marcoPolo({
  url: '/users/search',
  formatItem: function (data, $item) {
    return data.first_name + ' ' + data.last_name;
  },
  onSelect: function (data, $item) {
    window.location = data.profile_url;
  }
});

JSON (Исходные данные):

 [
  {
    "first_name": "James",
    "last_name": "Butler",
    "profile_url": "/users/78749",
  },
  {
    "first_name": "Win",
    "last_name": "Butler",
    "profile_url": "/users/41480",
  },
]

Чтобы узнать больше, перейдите по следующим ссылкам:

8. xDSoft Автозаполнение Как Google

xdsoft autocomplete

Это легкий плагин jQuery для автозаполнения с поддержкой локальных и удаленных источников данных. Это показывает складывание акцента.

Вот пример реализации кода:

JavaScript

 $('#remote_input2').autocomplete({source:[
 {
  url:"/component/jquery_plugins/?task=demodata&q=%QUERY%",
  type:'remote'
 },
 ["One","Two","Three"]
]});

Чтобы узнать больше, перейдите по следующим ссылкам:

9. JQuery Typeahead Поиск

JQuery Typeahead

JQuery Typeahead Search — плагин автозаполнения, построенный с глубокими настройками. Он работает во всех современных браузерах IE8 + и поддерживает несколько внутренних и внешних обратных вызовов AJAX.

Если вы ознакомитесь с демонстрационной страницей, вы найдете множество примеров различных реализаций кода.

10. Алголия Автозаполнение

Алголия Автозаполнение

Эта библиотека JavaScript позволяет добавлять быстрое и полнофункциональное меню автозаполнения в окно поиска. Его можно комбинировать для работы с поисковой системой Algolia .

Он поддерживает все современные браузеры из IE9 и доступен в виде плагина jQuery, директивы Angular и в виде отдельной библиотеки. Наряду с обычными функциями, он имеет функции безопасности, такие как защита от атак XSS.

11. нг-бутстрап Typeahead

ng-bootstrap Typeahead

Если вы используете Angular и Bootstrap в своем проекте, вы должны использовать инфраструктуру ng-bootstrap . Он имеет компонент Typeahead, который работает как обычный плагин автозаполнения jQuery.

Он поддерживает шаблоны, локальные и удаленные наборы данных, а также обычные функции livesearch . Вот частичная реализация кода для поиска в Википедии:

HTML:

 <div class="form-group" [class.has-danger]="searchFailed">
  <label for="typeahead-http">Search for a wiki page:</label>
  <input id="typeahead-http" type="text" class="form-control" [(ngModel)]="model" [ngbTypeahead]="search" placeholder="Wikipedia search" />
  <span *ngIf="searching">searching...</span>
  <div class="form-control-feedback" *ngIf="searchFailed">Sorry, suggestions could not be loaded.</div>
</div>

Машинопись:

 @Injectable()
export class WikipediaService {
  constructor(private _jsonp: Jsonp) {}

  search(term: string) {
    if (term === '') {
      return Observable.of([]);
    }

    let wikiUrl = 'https://en.wikipedia.org/w/api.php';
    let params = new URLSearchParams();
    params.set('search', term);
    params.set('action', 'opensearch');
    params.set('format', 'json');
    params.set('callback', 'JSONP_CALLBACK');

    return this._jsonp
      .get(wikiUrl, {search: params})
      .map(response => <string[]> response.json()[1]);
  }
}

@Component({
  selector: 'ngbd-typeahead-http',
  templateUrl: './typeahead-http.html',
  providers: [WikipediaService],
  styles: [`.form-control { width: 300px; display: inline; }`]
})
export class NgbdTypeaheadHttp {
  model: any;
  searching = false;
  searchFailed = false;

  constructor(private _service: WikipediaService) {}

  search = (text$: Observable<string>) =>
    text$
      .debounceTime(300)
      .distinctUntilChanged()
      .do(() => this.searching = true)
      .switchMap(term =>
        this._service.search(term)
            .do(() => this.searchFailed = false)
            .catch(() => {
              this.searchFailed = true;
              return Observable.of([]);
            }))
      .do(() => this.searching = false);
}

Чтобы узнать больше, перейдите по следующим ссылкам:

12. Реагировать на автозаполнение

Реагировать на автозаполнение

Из заголовка видно, что это не плагин jQuery, но, тем не менее, это JavaScript. React Autosuggest — это библиотека с открытым исходным кодом с огромным количеством параметров конфигурации. Он удобен для мобильных устройств, совместим с WAI-ARIA, полностью настраивается и хорошо интегрируется с Redux и Flux.

Для настройки требуется немного усилий, но как только вы это сделаете, вы получите плагин поиска в реальном времени , который будет вести себя именно так, как вы этого хотите. Вот частичный пример кода компонента:

   return (
    <Autosuggest
      suggestions={suggestions}
      onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
      onSuggestionsClearRequested={this.onSuggestionsClearRequested}
      getSuggestionValue={getSuggestionValue}
      renderSuggestion={renderSuggestion}
      inputProps={inputProps}
    />
  );

Хотя исходная документация иллюстрирует решение, использующее локальный массив для источника данных, вы можете легко заменить его с помощью вызова удаленной выборки внутри функции onSuggestionsFetchRequested()

Чтобы узнать больше, перейдите по следующим ссылкам:

13. W3Schools Ajax Live Поиск

w3schools

Если вы хотите избежать зависимостей и реализовать решение на чистом JavaScript, то вам следует попробовать это решение, предоставленное w3schools.com .

Серверная часть, используемая в этом примере, использует сервер PHP. Очевидно, вы можете заменить это серверной технологией по вашему выбору. Код требует данных в формате XML. Вы также можете рефакторинг кода для принятия форматов JSON.

Отличительной особенностью этого решения является то, что оно работает со всеми современными браузерами и более старыми, вплоть до IE5!

HTML:

 <form>
  <input type="text" size="30" onkeyup="showResult(this.value)">
  <div id="livesearch"></div>
</form>

JavaScript:

 function showResult(str) {
  if (str.length==0) {
    document.getElementById("livesearch").innerHTML="";
    document.getElementById("livesearch").style.border="0px";
    return;
  }
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("livesearch").innerHTML=this.responseText;
      document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    }
  }
  xmlhttp.open("GET","livesearch.php?q="+str,true);
  xmlhttp.send();
}

Чтобы узнать больше, перейдите по следующей ссылке:

14. WordPress Live Search

Дейв WordPress Live Search

Если вы используете WordPress, вам будет приятно узнать, что вы можете реализовать живой поиск с минимальным или вообще без кодирования. Все, что вам нужно, это установить и настроить плагин WordPress с функцией поиска в реальном времени . Самым популярным из них является WordPress Live Search от Dave, в настоящее время более 10 000 активных установок. Он совместим с большинством тем, имеет несколько настраиваемых параметров и легко интегрируется с минимальными усилиями. Он также поставляется с учебником YouTube, который демонстрирует весь процесс настройки.

Чтобы узнать больше, перейдите по следующим ссылкам:

Резюме

Я надеюсь, что этот список поможет вам выбрать подходящее поисковое решение для вашего проекта. В зависимости от вашего опыта и среды проекта некоторые из них легче внедрить и настроить, чем другие.

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