我正在尝试为实时搜索实现突出显示功能。
我所做的是,发送一个带有用户寻找的令牌的 ajax 请求。我收到一个包含表格的 html 文本。
所以我想我可以使用一个简单的正则表达式,寻找用户令牌,然后用一个跨度包围它,但我收到了一些长填充<a>
的 - 标签,所以很有可能用户输入了一些东西,我通过替换里面的东西来破坏我的 HTML一个标签。
那么如何在搜索中排除 html 标签?
哦,我正在使用 javascript 正则表达式。
我正在尝试为实时搜索实现突出显示功能。
我所做的是,发送一个带有用户寻找的令牌的 ajax 请求。我收到一个包含表格的 html 文本。
所以我想我可以使用一个简单的正则表达式,寻找用户令牌,然后用一个跨度包围它,但我收到了一些长填充<a>
的 - 标签,所以很有可能用户输入了一些东西,我通过替换里面的东西来破坏我的 HTML一个标签。
那么如何在搜索中排除 html 标签?
哦,我正在使用 javascript 正则表达式。
您需要加载jQuery highlight插件,然后您可以执行以下操作:
var words = "keyword1,keyword2,keyword3";
var keywords = words.split(',');
for(var i = 0; i < keywords.length; i++) {
$(selector).highlight($.trim(keywords[i]));
}
如果您想在整个页面中突出显示,则替换selector
为'body'
,否则使用选择器作为所需元素。
//These results to be highlighted
var results = [];
results[0] = 'jquery';
results[1] = 'json';
results[2] = 'Java Script';
results[3] = 'java';
results[4] = 'java Update';
results[5] = 'javelin';
results[6] = 'James';
results[7] = 'jacob';
results[8] = 'Jail';
results[9] = 'Jailor';
jQuery(document).ready(function(){
//Search the results
jQuery('#search').live('keyup', function(event){
var term = jQuery(this).val();//keyword to be matched
var htm = '';
//Keys with codes 40 and below are special (enter, arrow keys, escape, etc.), Key code 8 is backspace.
if(event.keyCode > 40 || event.keyCode <91 || event.keyCode == 8 ||
event.keyCode == 20 || event.keyCode == 16 || event.keyCode == 9 ||
event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 ||
event.keyCode == 40) {
for(x in results){
var match = results[x];
if(match.toLowerCase().indexOf(term.toLowerCase()) != -1){
var o = '<b><u>'+term+'</u></b>';
var a = match.replace(term, o);
htm += '<li>'+a+'</li>';
}
}
//create a orderd list for the matched results
var output = '<ol>' + htm + '</ol>';
if (htm.length > 0) {
jQuery('#result').show().append(output);
}
}
});
});
完整的教程可以在这里找到:http ://www.webspeaks.in/2012/09/live-text-search-highlight-using.html
不确定 jQuery 插件的效果如何,这是我想出的脚本,但没有突出显示多个标签上的文本。如果我想突出显示“我的脚本”并且 html 看起来像“我的脚本”,那么它不会被突出显示。还在做那部分。
这是到目前为止的脚本:
str='<img src="brown fox.jpg" title="The brown fox" />'
+'<p>some text containing fox. And onother fox.</p>'
var word="fox";
word="(\\b"+
word.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1")
+ "\\b)";
var r = new RegExp(word,"igm")
str.replace(/(>[^<]+)/igm,function(a){
return a.replace(r,"<span class='hl'>$1</span>");
})