搜索词突出显示代码不工作正确
问题描述:
我使用了一块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");
答
将您的搜索词分解为单词。
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
是的,我现在看到了,我必须分割字符串和循环呢? – user759235 2011-05-19 22:34:42
Ryan提供的代码实际上不需要循环。它创建了一个单一的正则表达式,它可以匹配任何和所有你输入的单词。您只需运行该正则表达式而不是您在代码中使用的正则表达式。 (用Ryan's替换你的'var pattern ...'行。) – DavidJCobb 2011-05-19 22:38:26
必须解决一些错误。更新的线条作品。 – 2011-05-19 22:38:51