2010-12-09 66 views
4

如何在具有特殊字符的單詞(如德語:ö,Ä,é或ß)上自動完成匹配。例如,我想讓「mun」匹配「München」和「Munchen」。具有特殊字符(例如ö,Ä,é或ß)的jQuery自動完成

+0

誰在處理搜索和返回的結果? jQuery的?或者像Ajax這樣的PHP/Java /等一些服務器端腳本?如果是後者,那麼應該在這個角落尋找解決方案,而不是在jQuery角落。你必須告訴更多關於當時使用的服務器端環境。 – BalusC 2010-12-09 20:47:20

回答

3

有在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; 
 
};

2

我預讀取,和敲我的頭靠在牆上小時後,這是因爲使用簡單utf8_encode返回JSON腳本:

utf8_encode(stripslashes($ variable));

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)); 
 
     })); 
 
    } 
 
    }); 
 
});

相關問題