JavaScript Typeahead自动完成匹配重音和波浪号问题

时间:2014-03-30 22:31:49

标签: javascript jquery utf-8 autocomplete typeahead.js

我正在使用Typeahead jQuery库,但当用户输入类似e的人声时,它也应匹配外国人声,例如éë,{{ 1}}。

èn匹配。

这是我的代码:

ñ

我怎样才能做到这一点?

谢谢!

1 个答案:

答案 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(它决定了外来人物映射到的西方字符);你可以在小提琴中找到这个列表。