如何使用jquery ui自动完成功能使匹配的文本变为粗体?

apo*_*lka 24 jquery jquery-ui autocomplete

我想知道如何在使用jquery ui自动完成时使自动完成建议的匹配部分变为粗体?

因此,例如,如果您键入"ja"并且建议是javascript和java(就像在jquery ui演示页面上的示例中那样),那么我想在两个建议中使"ja"变为粗体.

谁知道怎么做?

非常感谢您的帮助...

peo*_*eol 42

我不确定为什么自动完成与其包含的其他功能相比是如此简单(例如可放置,可排序,可拖动等).

它应该真的为您提供一个可设置的选项,例如用它包装<span class="ui-autocomplete-term">term</span>或类似的东西.

你可以做到像这样

它应该是非常明显的; 如果没有,请大声喊叫.

  • 忽略案例版本http://jsfiddle.net/fozylet/kTAMm/从[这里]得到了想法(http://stackoverflow.com/questions/957207/highlight-multiple-keywords-for-jquery-autocomplete) (13认同)

Fre*_*ric 36

在jQuery UI 1.11.1中,这是我用来使其工作的代码(不区分大小写):

open: function (e, ui) {
    var acData = $(this).data('ui-autocomplete');
    acData
    .menu
    .element
    .find('li')
    .each(function () {
        var me = $(this);
        var keywords = acData.term.split(' ').join('|');
        me.text(me.text().replace(new RegExp("(" + keywords + ")", "gi"), '<b>$1</b>'));
     });
 }
Run Code Online (Sandbox Code Playgroud)

  • `me.html(me.text ...`在最后一行,以避免打印标签作为实体,如`<b>海</ b>` (5认同)
  • 在2015年,这是答案:) (3认同)
  • 最佳答案.简单解决方案 (3认同)
  • 将 `me.text(...` 部分替换为: `let textWrapper = me.find('.ui-menu-item-wrapper'); let text = textWrapper.text(); let newTextHtml = text.replace( new RegExp("(" + keywords + ")", "gi"), '&lt;b&gt;$1&lt;/b&gt;'); textWrapper.html(newTextHtml);` 保持突出显示颜色。 (3认同)
  • me.text(me.text().replace(new RegExp("("+ keywords +")","gi"),'<b> $ 1 </ b>')); 在me.text之后用html替换文本 (2认同)

小智 23

如果您正在使用jquery-ui.js:

acData = $(this).data('autocomplete');// will not work 
//instead use 
acData = $(this).data('uiAutocomplete');
Run Code Online (Sandbox Code Playgroud)


bre*_*vhb 20

对于那些想要搜索不区分大小写的人来说,这是一个解决方案(只有open函数是不同的):

        open: function(e,ui) {
            var
            acData = $(this).data('autocomplete');

            acData
            .menu
            .element
            .find('a')
            .each(function() {
                var me = $(this);
                var regex = new RegExp(acData.term, "gi");
                me.html( me.text().replace(regex, function (matched) {
                    return termTemplate.replace('%s', matched);
                }) );
            });
        }
Run Code Online (Sandbox Code Playgroud)

  • - @ brechtvhb这是你的回答还是@ fozylet的?如果@ fozylet可以给你信用吗? (2认同)