具有特殊字符的jQuery自动完成(即ö,Ä,é或ß)

时间:2010-12-09 20:32:05

标签: jquery autocomplete diacritics

如何对包含特殊字符的单词进行自动完成匹配,例如德语:ö,Ä,é或ß。例如,我喜欢“mun”来匹配“München”和“Munchen”。

3 个答案:

答案 0 :(得分:4)

A List Apart上有一篇很好的文章,其中包含一些Javascript代码

var accentMap = {
  'á': 'a',
  'é': 'e',
  'í': 'i',
  'ó': 'o',
  'ú': 'u'
};

function accent_fold(s) {
  if (!s) {
    return '';
  }
  var ret = '';
  for (var i = 0; i < s.length; i++) {
    ret += accent_map[s.charAt(i)] || s.charAt(i);
  }
  return ret;
};

答案 1 :(得分:3)

我使用typeahead,并且在我的头撞墙后几个小时就像在脚本上使用utf8_encode返回JSON一样简单:

  

函数utf8_encode(的stripslashes($变量));

答案 2 :(得分:0)

jQuery UI在他们的网站上有一个针对此问题(重音折叠)的演示:https://jqueryui.com/autocomplete/#folding

$(function() {
  var names = ["Jörn Zaefferer", "Scott González", "John Resig"];

  var accentMap = {
    "á": "a",
    "ö": "o"
  };
  var normalize = function(term) {
    var ret = "";
    for (var i = 0; i < term.length; i++) {
      ret += accentMap[term.charAt(i)] || term.charAt(i);
    }
    return ret;
  };

  $("#developer").autocomplete({
    source: function(request, response) {
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
      response($.grep(names, function(value) {
        value = value.label || value.value || value;
        return matcher.test(value) || matcher.test(normalize(value));
      }));
    }
  });
});