突出显示 jQuery.autocomplete 的多个关键字

Posted

技术标签:

【中文标题】突出显示 jQuery.autocomplete 的多个关键字【英文标题】:Highlight multiple keywords for jQuery.autocomplete 【发布时间】:2010-10-31 17:29:24 【问题描述】:

我正在使用 jQuery Autocomplete plugin,但我在结果突出显示方面遇到了一些问题。如果找到匹配项,但输入的关键字包含空格,则不会突出显示。示例:

搜索 = "foo",结果 = "foo bar",显示 = "foo bar"

搜索 = “foo ba”,结果 = “foo bar”,显示 = “foo bar”

所以,我正在尝试使用自动完成功能的highlight option 来解决此问题,您可以在其中使用函数对结果执行一些自定义操作。目前我有这个:

$('.autocomplete').autocomplete('getmatch.php', 
    highlight: function(match, keywords) 
        keywords = keywords.split(' ').join('|');
        return match.replace(/(get|keywords|here)/gi,'<b>$1</b>');
    
);

replace 函数将字符串中所有匹配的单词替换为粗体版本,这是有效的。但是,我不知道如何将关键字放入该函数。我想我会把它们分开,然后用'|'加入它们,所以“foo bar”最终像“foo|bar”。但是这样的事情似乎不起作用:

<pre>return match.replace(/(keywords)/gi,'&lt;b&gt;$1&lt;/b&gt;'); // seen as text, I think</pre>

<pre>return match.replace('/'+(keywords)+'/gi','&lt;b&gt;$1&lt;/b&gt;'); // nothing either</pre>

有什么想法吗?

【问题讨论】:

【参考方案1】:

使用RegExp constructor从字符串创建一个RegExp对象:

$('.autocomplete').autocomplete('getmatch.php', 
    highlight: function(match, keywords) 
        keywords = keywords.split(' ').join('|');
        return match.replace(new RegExp("("+keywords+")", "gi"),'<b>$1</b>');
    
);

【讨论】:

谢谢,这适用于所有关键字的替换!但是,它们被替换为“$1”——实际的文本 $1,而不是 $1 应该代表的关键字本身? 通过对关键字进行分组来修复它。 突出显示的目的是,如果您输入的值与某个项目匹配,但不是该项目,用户可以轻松替换它。想想在 Excel 中,当您键入“Ma”并且其上方的单元格显示“Male”时 - 它会自动填充“le”但将它们突出显示,这样您就可以继续输入“nifest”而不会停止。 它对英文关键字工作正常,但是对于印度语言特别是印地语怎么办?【参考方案2】:

你的函数应该使用这个签名:function(value, term)。值和术语将由自动完成插件填充并具有您需要的值。

【讨论】:

【参考方案3】:

我调整了最初的自动完成实现,因为上面的内容被简化了,不会处理术语中的正则表达式特殊字符。

function doTheHighlight(value, term) 
    // Escape any regexy type characters so they don't bugger up the other reg ex
    term = term.replace(/([\^\$\(\)\[\]\\\*\.\+\?\|\\])/gi, "\\$1");

    // Join the terms with a pipe as an 'OR'
    term = term.split(' ').join('|');

    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");

【讨论】:

以上是关于突出显示 jQuery.autocomplete 的多个关键字的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery .autocomplete 检索项目将不起作用,也不会引发任何错误

jquery - (...).autocomplete 不是一个函数

如何使 jQuery AutoComplete 功能在 Durandal 中工作?

如何将 Jquery Autocomplete 设置为特定值并使用 JSON 对象的数据源显示它的标签

Jquery Autocomplete Gem-将参数传递到数据库

jquery autoComplete 插件