Первое условие - изменение ввода символа при каждом нажатии клавиши, если условие выполнено:
var langMap = {
'a' : 'a',
'a' : 'a',
'o' : 'o'
};
Теперь, когда вы вводите «b», в поиске появляется банана, потому что «b» не является частью вашего массива «a», и, следовательно, он не изменяется. Он ищет любое слово, начинающееся с «b», а результатом поиска является «Banana»,
Однако, как только вы наберете langMap, Banana больше не существует, потому что он был преобразован в 'a'. В результате он ищет «ba», который возвращает нулевые результаты (как и ожидалось).
В другой заметке вы также можете столкнуться с другой проблемой позже с вашим массивом langMap:
var langMap = {
"a":"a",
"a":"a",
"o":"o"
}
$('#search-items-box').keyup(function(){
var valThis = $(this).val().toLowerCase();
var filteredWord = getLatinWord(valThis);
if(filteredWord == ""){
$('.itemsList .m3-item').show();
} else {
$('.itemsList .m3-item').each(function(){
var text = $(this).text().toLowerCase();
text = getLatinWord(text);
(text.indexOf(filteredWord) === 0) ? $(this).show() : $(this).hide();
});
}
});
function getLatinWord(word){
return word.split('').map(function(character){
if (langMap[character]) {
return langMap[character];
}
return character;
}).join('');
}
У вас есть один ключ, 'a'
который определяет два разных значения. Одно из значений никогда не будет доступно.
Основываясь на нашем обсуждении, вот мое предлагаемое решение:
- Инвертируйте ключи и значения для
langMap
-
Преобразование сравниваемого текста в латинские символы
normalizeWord