5

我正在尝试为实时搜索实现突出显示功能。

我所做的是,发送一个带有用户寻找的令牌的 ajax 请求。我收到一个包含表格的 html 文本。

所以我想我可以使用一个简单的正则表达式,寻找用户令牌,然后用一个跨度包围它,但我收到了一些长填充<a>的 - 标签,所以很有可能用户输入了一些东西,我通过替换里面的东西来破坏我的 HTML一个标签。

那么如何在搜索中排除 html 标签?

哦,我正在使用 javascript 正则表达式。

4

3 回答 3

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',否则使用选择器作为所需元素。

于 2012-04-20T23:20:43.573 回答
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

于 2012-09-14T04:49:12.323 回答
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>");
})
于 2012-10-19T08:19:59.887 回答