2012-03-24 3 views
1

У меня есть скрипт, который позволяет отображать результаты поиска по KeyUp: JsFiddleСделать аналогичный текст жирным шрифтом, как Google

Я хочу, чтобы имитировать Google, добавив жирный эффект на текст в результатах, если он соответствует значению входного сигнала. У меня есть код, в котором я генерировать «метки», как это:

var tag = $('#searchbox').val(); 

if (e.keyCode == 32) { 

var div = $('<div class="tags" />'); 

    div.append(tag); 
    $(document.body).append(div); 

    } 

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

if($('#searchbox').val() === $('.tags').text()){ 

var makeBold = $('.tags').text(); 

$('#txtresults').addClass(makeBold); 
} 

Это не работает. Я установил эти коды в событии keyup в сценарии примера.

+0

Я предлагаю вам сначала очистить теги, а затем добавить введенные теги, потому что, когда вы вводите тег и нажимаете пробел, затем пробегите и снова пробел, теги дублируются. – Cobold

+0

@Cobold Должно ли это иметь значение, если я просто хочу сделать соответствующий текст полужирным? Я не вижу проблемы в дублированном тексте, если соответствующий текст выделен жирным шрифтом. – Youss

+0

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

ответ

1

Вы должны изменить код, в котором отображаются результаты поиска.

Вам нужно искать внутри Description имущества для поисковых терминов и завернуть их в элемент, который вы хотите ..


UPDATE

Вам просто нужно изменить регулярное выражение, используемое искать, немного включать несколько терминов ..

var searchRegex = new RegExp(response.SearchResponse.Query.SearchTerms.replace(/\s+/gi,' ').split(' ').join('|'),'gi'); 

Рабочий пример наhttp://jsfiddle.net/gaby/CGN8e/7/


ОРИГИНАЛ КОД

Меняем

$.each(searchResults, function(i, searchResult) { 
    if (searchResult.Description == null) { 
     searchResult.Description = ''; 
    } 

    webResultOutput.push('<li>', 
         '<h3><a href="', searchResult.Url, '">', searchResult.Title, '</a></h3>', 
         '<p class="desc">', 
         searchResult.Description, 
         '</p>', 
         '<p class="url">', searchResult.DisplayUrl, '</p>', 
         '</li>'); 
     }); 

в

var searchRegex = new RegExp(response.SearchResponse.Query.SearchTerms,'gi'); 
$.each(searchResults, function(i, searchResult) { 
    if (searchResult.Description == null) { 
     searchResult.Description = ''; 
    } 

    webResultOutput.push('<li>', 
         '<h3><a href="', searchResult.Url, '">', searchResult.Title, '</a></h3>', 
         '<p class="desc">', 
         searchResult.Description.replace(searchRegex , function(match){ return '<b>'+match+'</b>'}), 
         '</p>', 
         '<p class="url">', searchResult.DisplayUrl, '</p>', 
         '</li>'); 
     }); 

Работа в примерhttp://jsfiddle.net/gaby/CGN8e/5/

+0

Привет, я думаю, это здорово, и это определенно поможет мне в той или иной форме , Но основная причина, по которой я создал теги, - это пробел и несколько слов. Ваш код только выделяет первый запрос, как только вы нажимаете клавишу пробела, ничего не подсвечивается. Вот почему я действительно хотел бы использовать ВСЕ слова в тегах для каждого запроса. Поэтому «Мне нравится стек» будет выделять I - like - stack. Надеюсь, вы (все еще) заинтересованы в этом вызове. – Youss

+0

@Youss, все слова в последнем поисковом запросе. правильно ? а не предыдущие запросы. –

+0

Основная проблема заключается в том, что если бы вы набрали '' I like stack '', он выделил бы точное предложение. Но мне действительно хотелось бы выделить «' Í'' и выделить «как» и выделить «стек», как это делает Google. В противном случае трудное предложение нигде не будет выделено. – Youss

Смежные вопросы