任何人都可以帮我吗?
自动填充应基于句子中每个单词的首字母。
例如
如果我正在搜索" s"
结果应为:
http://i.stack.imgur.com/9H9ma.gif
结果应该基于" s"每个单词的第一个字符在句子上。
帮我解决这个问题..
提前致谢。
尝试:
$(document).ready(function() {
$("#request").autocomplete({
source: function(req, responseFn) {
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp( "\\b" + re, "i" );
var a = $.grep( charity_names, function(item,index){
return matcher.test(item);
});
responseFn( a );
}, delay:0
});
});
对于Highting我使用此代码的文本:
/ *自动填充突出显示* /
String.prototype.replaceAt = function(index, char) {
return this.substr(0, index) + "<span style='font-weight:bold;color:#333;'>" + char + "</span>";
}
$.ui.autocomplete.prototype._renderItem = function(ul, item) {
this.term = this.term.toLowerCase();
var resultStr = item.label.toLowerCase();
var t = "";
while (resultStr.indexOf(this.term) != -1) {
var index = resultStr.indexOf(this.term);
t = t + item.label.replaceAt(index, item.label.slice(index, index + this.term.length));
resultStr = resultStr.substr(index + this.term.length);
item.label = item.label.substr(index + this.term.length);
}
return $("<li></li>").data("item.autocomplete", item).append("<a style='padding:4px 4px; display:block; width:97.3%;'>" + t + item.label + "</a>").appendTo(ul);
};
/* Autocomplete highlighting Ends here*/
答案 0 :(得分:0)
好的,您的代码有几点:
_renderItem
,并删除所有indexOf
和substr
次调用。实际上,您已经在source
函数中使用了所需的正则表达式。term
匹配后放弃了所有内容。同样,正则表达式&#34;魔术&#34; prototype
通常是不好的做法。 jQueryUI有一个优秀的小部件工厂,它的非常易于使用。因此,针对以上几点,您可以执行以下操作:
$.widget("my.customAutocomplete", $.ui.autocomplete, {
_renderItem: function(ul, item) {
return $("<li>").append(
$("<a>").html(
item.label.replace(
new RegExp("\\b" + this.term, "i"),
"<span style='font-weight:bold;color:#333;'>$&</span>"
)
)).appendTo(ul);
}
});
将此与您已经拥有的source
过滤相结合
Here's an example fiddle(也有html转义,不确定你的例子中是否故意忽略了这一点)