Есть список городов.
При вводе данных в строку в списке должны остаться города, которые начинаются с вводимого значения. То есть если я пишу "аб" то у меня должен остаться только абакан, но не набережные челны
Попробовал вот так, но ищет currentdata по всей строке
str.toLowerCase().indexOf(currentdata.toLowerCase());
вот моя функция:
$('#test').keyup(function() {
currenVal = $(this).val().toLowerCase();
$('ul.content>li').each(function(i, el) {
if ($(el).text().toLowerCase().indexOf(currenVal) > -1) {
$(el).removeClass('hidden');
} else {
$(el).addClass('hidden');
}
})
})
li.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input id="test">
<ul class="content">
<li>Абакан</li>
<li>Ангарск</li>
<li>Армавир</li>
<li>Архангельск</li>
<li>Астрахань</li>
<li>Балаково</li>
<li>Балашиха</li>
</ul>
$('#test').keyup(function() {
currenVal = $(this).val().toLowerCase();
$('ul.content>li').each(function(i, el) {
if ($(el).text().toLowerCase().indexOf(currenVal) == 0) {
$(el).removeClass('hidden');
} else {
$(el).addClass('hidden');
}
})
})
li.hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input id="test">
<ul class="content">
<li>Абакан</li>
<li>Ангарск</li>
<li>Армавир</li>
<li>Архангельск</li>
<li>Астрахань</li>
<li>Балаково</li>
<li>Балашиха</li>
<li>Набережные чалны</li>
</ul>
indexOf возвращает индекс первого вхождения, если вам надо, чтобы поиск осуществлялся в начале строки, то над делать проверку на то равен ли indexOf нулю
let array = [
'Балаково',
'Абакан',
'Архангельск',
'Набережные челны'
]
let filter = 'аб';
//Поиск вхождения только в начале
console.log(array.filter(x => x.toLowerCase().indexOf(filter.toLowerCase()) == 0));
//Поиск по любому вхождению
console.log(array.filter(x => x.toLowerCase().indexOf(filter.toLowerCase()) >= 0));
Зачем такие сложности? Используйте функцию str.startsWith().
Нужно всего-то заменить
($(el).text().toLowerCase().indexOf(currenVal) > -1)
на
($(el).text().toLowerCase().startsWith(currenVal))
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости