2010-12-09 3 views
4

Comment puis-je faire correspondre automatiquement les mots avec des caractères spéciaux, tels que ceux en allemand: ö, Ä, é ou ß. Par exemple, j'aimerais que "mun" corresponde à "München" et "Munchen".jQuery Saisie semi-automatique avec des caractères spéciaux (par exemple ö, Ä, é ou ß)

+0

Qui traitement de la recherche et de retourner les résultats? jQuery? Ou un script côté serveur comme PHP/Java/etc par Ajax? Si ce dernier, alors la solution devrait être recherchée dans ce coin, pas dans le coin jQuery. Vous devez en dire plus sur l'environnement côté serveur utilisé alors. – BalusC

+0

Tout est fait du côté client via jQuery en utilisant un ensemble de données de paires clé/valeur chargées une fois lors du chargement de la page. La clé est l'ID de l'article, et la valeur est le texte sur lequel je suis apparié. –

+1

Cela deviendra plus compliqué. JavaScript n'a aucune notion de collation. Votre meilleur centre de villégiature sera probablement une recherche et un jumelage basés sur le codage. Je recommande de faire la correspondance sur le côté serveur en utilisant des langages ou des DB de collation-aware. – BalusC

Répondre

3

Il y a un excellent article sur ce sujet à A List Apart qui comprend un code 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

J'utilise typeahead, et après les heures de me cogner la tête contre un mur, il était aussi simple que l'utilisation utf8_encode sur le script qui renvoie le JSON:

utf8_encode (stripslashes ($ variable));

0

jQuery UI a une démo pour ce problème (pliage d'accent) sur leur site: 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)); 
 
     })); 
 
    } 
 
    }); 
 
});

Questions connexes