答案 0 :(得分:7)
我在下面的jsFiddle中写了一个解决方案:
http://jsfiddle.net/Fresh/F3hG9/
解决方案的关键部分是规范化用于搜索的名称,并且还包括将用于显示目的的原始名称;你可以在" local"的定义中看到这一点。下面:
var nombres = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: queryTokenizer,
local: $.map(names, function (name) {
// Normalize the name - use this for searching
var normalized = normalize(name);
return {
value: normalized,
// Include the original name - use this for display purposes
displayValue: name
};
})
});
这是normailze函数(如下所示)取代" foreign"西方替代品的角色:
var normalize = function (input) {
$.each(charMap, function (unnormalizedChar, normalizedChar) {
var regex = new RegExp(unnormalizedChar, 'gi');
input = input.replace(regex, normalizedChar);
});
return input;
};
为了简洁起见,我省略了charMap(它决定了外来人物映射到的西方字符);你可以在小提琴中找到这个列表。