我正在尝试为livesearch实现突出显示功能。
我所做的是,使用用户查找的令牌发送ajax请求。我收到一个包含表格的html文本。
所以我认为我可以使用一个简单的正则表达式,查找用户令牌然后用一个span来包围它,但是我收到一些填充的<a>
- 标签,所以用户键入内容的机会很大我通过替换标签内的内容来破坏我的HTML。
那么如何在搜索中排除html标签呢?
哦,我正在使用javascript regexp。
答案 0 :(得分:5)
您需要加载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'
,否则请使用选择器作为所需元素。
答案 1 :(得分:0)
//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
答案 2 :(得分:0)
不确定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>");
})