У меня есть некоторые данные JSON, которые выглядят так (название, desc):
var dreams = [
{ "keyword": "Abandon", "desc": "Difficulty framing plans..." },
{ "keyword": "Abandonment", "desc": "Your unconscious may be giving you messages..." },
{ "keyword": "Abbess", "desc": "Do you even know what an Abbess is?" },
{ "keyword": "Abbey", "desc": "Wedding or funeral?" },
{ "keyword": "Abbot", "desc": "I smell treachery!" },
{ "keyword": "Abbreviations", "desc": "WTF, IDK" },
{ "keyword": "Abdomen", "desc": "Time for a diet" }
]
Я использую jQuery Autocomplete, чтобы делать предложения в текстовом поле, и все работает нормально. То, что я хотел бы сделать, - разобрать описание выбранного термина и искать другие ключевые слова (заголовки) из того же источника JSON, и если я что-то нахожу, оберните совпадение по ссылке, создав внутренние гиперссылки из одного источника.
Например, если я выбрал "Abandon", и в описании было упоминание (или упоминание) "Аббатства", я бы хотел обернуть ссылку вокруг этих упоминаний.
Какой самый эффективный способ сделать это? Разбор каждого слова в описании и регулярное выражение против JSON? В конце концов, в этом списке может быть 10 000 записей. Я должен сделать это на стороне клиента для демонстрации; возможно, позже я смогу перейти на node.js, чтобы сделать его серверной частью более эффективно, но на данный момент он должен работать в jQuery.
Хорошо, так что, если это полезно для всех, я закончил использование Julian Shapiro отличным blast.js(http://julian.com/research/blast/) и собрал простое демо, используя следующий код (сохраняя тот же JSON данные выше)
$.each(dreams, function(index, element) {
if (element.value != suggestion.value) {
$("#pageBody").blast({
search: element.value,
tag: 'a'
});
}
});
Это просто обертывает тег (еще не назначенный) вокруг любых совпадений, которые он находит. Мне пришлось добавить некоторые ключевые слова в описания, чтобы он мог что-то найти, но он работает и очень быстро.
fuzzy search
var str = description.split(" ");
$(str).each(function(){ /*look up description in JSON and do something if found*/ });
но я думаю, что это может быть ужасно неэффективный подход ...: /