【发布时间】:2011-03-21 15:55:08
【问题描述】:
我想知道在使用 jquery ui 自动完成时如何使自动完成建议的匹配部分变为粗体?
例如,如果您输入“ja”并且建议是 javascript 和 java(如 jquery ui 演示页面上的示例),那么我想在两个建议中都将“ja”加粗。
有人知道怎么做吗?
非常感谢您的帮助...
【问题讨论】:
标签: jquery jquery-ui autocomplete
我想知道在使用 jquery ui 自动完成时如何使自动完成建议的匹配部分变为粗体?
例如,如果您输入“ja”并且建议是 javascript 和 java(如 jquery ui 演示页面上的示例),那么我想在两个建议中都将“ja”加粗。
有人知道怎么做吗?
非常感谢您的帮助...
【问题讨论】:
标签: jquery jquery-ui autocomplete
如果您使用的是jquery-ui.js:
acData = $(this).data('autocomplete');// will not work
//instead use
acData = $(this).data('uiAutocomplete');
【讨论】:
在 jQuery UI 1.9.x 中,此解决方案对我不起作用,因为 acData 未定义 - 数据引用时间错误,因为我在文档准备好之前初始化了 PluginHelper。
我想出使用 jQuery UI 小部件工厂修改 _renderItem:
$.widget("custom.autocompleteHighlight", $.ui.autocomplete, {
_renderItem: function (ul, item) {
var regexp = new RegExp('(' + this.term + ')', 'gi'),
classString = this.options.HighlightClass ? ' class="' + this.options.highlightClass + '"' : '',
label = item.label.replace(regexp, '<span' + classString + '>$1</span>');
return $('<li><a href="#">' + label + '</a></li>').appendTo(ul);
}
});
您现在可以使用它:
$('input.jsAutocompleteHighlight').autocompleteHighlight({
highlightClass: 'ui-autocomplete-highlight'
});
CSS 样式:
.ui-autocomplete-highlight {
font-weight: bold;
}
【讨论】:
在 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>'));
});
}
【讨论】:
me.html(me.text... 在最后一行,以避免将标签打印为实体,例如<b>sea</b>
me.text(... 部分替换为:let textWrapper = me.find('.ui-menu-item-wrapper'); let text = textWrapper.text(); let newTextHtml = text.replace(new RegExp("(" + keywords + ")", "gi"), '<b>$1</b>'); textWrapper.html(newTextHtml); 以保持高亮颜色。
我不确定为什么与它包含的其他功能(例如可放置、可排序、可拖动等)相比,自动完成功能如此简单。
它确实应该为您提供一个可样式化的选项,例如用<span class="ui-autocomplete-term">term</span> 或类似的东西包装它。
你可以像this那样做
这应该是不言自明的;如果没有,请大声喊叫。
【讨论】:
对于那些想要搜索不区分大小写的人来说,这里有一个解决方案(只有 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);
}) );
});
}
【讨论】: