Есть несколько вещей, которые вы могли бы сделать здесь. Вероятно, лучше всего было бы дважды запустить исходный поиск, поэтому, когда пользователь вводит значение, вы сначала запускаете поиск по вашим значениям для прямого совпадения;
User enters - HMS
Source returns - H.M.S.
No match
Итак, после этого вы захотите попытаться сопоставить то, что ввел пользователь, с отформатированным исходным значением;
User enters - HMS
Source returns formatted string (remove periods) - HMS
Match
Output original source value
Еще одна вещь, которую вы, возможно, захотите принять во внимание, это то, что пользователи часто не вводят строго тип своих запросов;
User enters - hms
Source returns formatted string (remove periods) - HMS
No match
Таким образом, вам также нужно будет перевести обе строки в нижний регистр, прежде чем пытаться что-либо сопоставить.
Предполагая, что ваш источник и методы поиска выполняются в бэкэнде, это действительно легко сделать. Используйте AJAX, чтобы получить ваш исходный код, и если он достаточно мал, вы можете даже сохранить его на клиентской машине для будущего использования, а затем просто выполните манипуляции со строками в коде позади и верните исходную модель.
Я также предполагаю, что вы, возможно, захотите сделать это с помощью чистого JQuery, и в этом случае я бы попросил посмотреть, как вы получаете исходный код, и отредактируете его.
Действительно простой пример этого в C # ASP.NET MVC будет выглядеть примерно так;
Скрипт:
$(document).ready(function () {
$("#searchTerm").autocomplete({
source: function (request, response) {
$.ajax({
url: "/Home/SearchSites",
data: "{ 'searchTerm': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data, function (item) {
return {
label: item.value,
value: item.value,
id: item.id
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
minLength: 1,
select: function (even, ui) {
window.location.href = '/Till/Index/' + ui.item.id;
}
});
});
Контроллер:
public JsonResult SearchSites(string searchTerm)
{
var suggestedSites = db.Sites.Where(s => searchTerm == null ||
s.Name.ToLower()
.StartsWith(searchTerm.ToLower()))
.Select(x => new { id = x.SiteUid_PK, value = x.Name })
.Take(5).ToList();
var result = Json(suggestedSites, JsonRequestBehavior.AllowGet);
return result;
}
Это должно быть адаптировано для любого языка, который вы используете, но логика останется почти такой же, и вам просто нужно будет добавить дополнительное форматирование строки в метод контроллера.
person
Inspector Squirrel
schedule
15.08.2014