Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Поиск подстроки в строке с начала

#javascript


Есть список городов.

При вводе данных в строку в списке должны остаться города, которые начинаются с вводимого
значения. То есть если я пишу "аб" то у меня должен остаться только абакан, но не набережные
челны


Балаково
Абакан
Архангельск
Набережные челны


Попробовал вот так, но ищет 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;
}


  • Абакан
  • Ангарск
  • Армавир
  • Архангельск
  • Астрахань
  • Балаково
  • Балашиха


Ответы

Ответ 1



$('#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; }
  • Абакан
  • Ангарск
  • Армавир
  • Архангельск
  • Астрахань
  • Балаково
  • Балашиха
  • Набережные чалны
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));

Ответ 2



Зачем такие сложности? Используйте функцию str.startsWith(). Нужно всего-то заменить ($(el).text().toLowerCase().indexOf(currenVal) > -1) на ($(el).text().toLowerCase().startsWith(currenVal))

Комментариев нет:

Отправить комментарий