1

我想创建一个搜索功能,以粗体显示搜索词,并且文本以该词为中心(围绕?)。

示例:我有这个文本:

普鲁斯!Porta parturient risus a hac dapibus nec, hac tortor habitasse adipiscing, nec facilisis aenean, facilisis dignissim ridiculus, integer est cum? Porttitor nisi nec。Platea,tortor egestas sagittis ut nisi phasellus enim parturient adipiscing lorem odio,montes dictumst,mus rhoncus a placerat。Lorem proin,cum mattis aenean nec。Augue et lorem ac augue cursus 坐在 adipiscing !Augue sociis mattis amet!Natoque lorem pid。在 est tincidunt, vut, arcu, duis? Cum cras sociis tristique sociis odio。Placerat ut rhoncus dictumst porta magna enim enim sed et tincidunt arcu duis integer elementum, hac dignissim。Montes duis ut。Auctor risus pulvinar cras, ut adipiscing 中的platea tincidunt, augue。快点!Dapibus placerat, ac ridiculus integer urna porttitor magnis platea cursus, mid in.

在本文中搜索单词adipiscing!

我想要的结果不是所有的文本,而是:

... ac augue cursus 坐在adipiscing !Augue sociis mattis amet!...

暂时,我写那个

 <%= highlight(truncate(sanitize(sound.document.html_safe), :length => 3000), @soundsstring) %>

在我的控制器中:

@sounds = Sound.where(:user_id => current_user.id).search(params[:search]).order('created_at DESC').order(sort_column + " " + sort_direction).page(params[:page]).per(15)
respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @sounds }
  @soundsstring = params[:search]

并且单词搜索以粗体显示。但研究集中在这个词上。如果你能帮助我。

我希望我很清楚

感谢。

4

1 回答 1

1

您可以使用 获取第一次出现的查询字符串String#index,然后减去多个字符:

start_index = [0, @original_text.index(@query_string) - 20].max

现在只显示原始文本的一部分,查询突出显示:

highlight @original_text[start_index, (@query_string.length + 20)], @query_string
于 2013-10-14T13:58:57.587 回答