Наткнулся на эту старую ветку и подумал, что попробую свои силы в выполнении быстрой функции.Я полагаюсь на упорядочивание переменных-разделителей, устанавливающих переменные OR, когда они совпадают в вызываемой функции replace ().Моя цель состояла в том, чтобы как можно больше использовать стандартную функцию javascript-замены JavaScript (regex-реализация), чтобы тяжелая обработка могла выполняться в низкоуровневом пространстве, оптимизированном для браузера, а не в дорогих сравнениях javascript по типам символов..
Это совсем не научно, но мой старый телефон Huawei IDEOS работает медленно, когда я подключаю другие функции в этой теме к своему автозаполнению, в то время как эта функция движется:
function accentFold(inStr) {
return inStr.replace(
/([àáâãäå])|([ç])|([èéêë])|([ìíîï])|([ñ])|([òóôõöø])|([ß])|([ùúûü])|([ÿ])|([æ])/g,
function (str, a, c, e, i, n, o, s, u, y, ae) {
if (a) return 'a';
if (c) return 'c';
if (e) return 'e';
if (i) return 'i';
if (n) return 'n';
if (o) return 'o';
if (s) return 's';
if (u) return 'u';
if (y) return 'y';
if (ae) return 'ae';
}
);
}
Если вы являетесь разработчиком jQuery, вот удобный пример использования этой функции;вы можете использовать: icontains так же, как вы используете: содержит в селекторе:
jQuery.expr[':'].icontains = function (obj, index, meta, stack) {
return accentFold(
(obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase()
)
.indexOf(accentFold(meta[3].toLowerCase())
) >= 0;
};