搜索词突出显示代码不工作正确

问题描述:

我使用了一块jQuery来突出显示搜索结果,它工作的很好,但我想匹配所有单个单词,而不是我输入的整个短语,如果我搜索“lorem ipsum悲”它看起来这个短语匹配,但我想脚本highlightes所有的单个单词,而不是整个短语搜索词突出显示代码不工作正确

继承人我的jQuery代码

$("#main-search-input").bind('keyup', function(e){ 
     var text = $.trim($(this).val()); 
     if(text !== '' && text !== ' '){ 
      var pattern = new RegExp(text, "gi"); 
     } 
     $('.sr-results a').each(function(i){ 
      var str = this; 
      var orgText = $(str).text(); 
       orgText = orgText.replace(pattern, function($1){ 
       return "<b class='sr-highlight'>" + $1 + "</b>"; 
      }); 
     $(str).html(orgText); 
     }); 
    }); 

斯普利特串中的空间,然后建立你的正则表达式看起来像/(word1 | word2 | word3)/。

var pattern = new RegExp('('+$.unique(text.split(" ")).join("|")+')',"gi"); 
+0

是的,我现在看到了,我必须分割字符串和循环呢? – user759235 2011-05-19 22:34:42

+0

Ryan提供的代码实际上不需要循环。它创建了一个单一的正则表达式,它可以匹配任何和所有你输入的单词。您只需运行该正则表达式而不是您在代码中使用的正则表达式。 (用Ryan's替换你的'var pattern ...'行。) – DavidJCobb 2011-05-19 22:38:26

+0

必须解决一些错误。更新的线条作品。 – 2011-05-19 22:38:51

将您的搜索词分解为单词。

var words = text.split(' '); 

确保不会有重复。

$.unique(words); 

最后你只需做你已经做什么,但在循环

for (var i = 0, len = words.length; i < len; i++) { 
    var word = words[i], 
     pattern = new RegExp(word, "gi"); 
     //and so on 
} 
+0

谢谢!我有这个想法。 – user759235 2011-05-19 22:51:00