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

266
14 сентября 2018, 10:30

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

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

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

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

Answer 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; 
}
<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));

Answer 2

Зачем такие сложности? Используйте функцию str.startsWith().

Нужно всего-то заменить

($(el).text().toLowerCase().indexOf(currenVal) > -1)

на

($(el).text().toLowerCase().startsWith(currenVal))
READ ALSO
Как можно сгенерировать option group через Js?

Как можно сгенерировать option group через Js?

Передомной стоит проблема, нет доступа к редактированию Html разметки по определенным причинам, но нужно объеденить options из select в тэг optiongroup,...

262
Самовызывающиеся функции JavaScript

Самовызывающиеся функции JavaScript

В чем отличие этих функций?

657
gulp-sass не компилирует scss-файлы в единый css

gulp-sass не компилирует scss-файлы в единый css

Собираю проект галпомПроблема с таской на сборку scss-файлов - плагин просто меняет разрешение scss на css, файлы не компилируются

257
Как лучше всего реализовать расчет на Jquery

Как лучше всего реализовать расчет на Jquery

Надо сделать мини расчетДопустим, есть сайт-магазин, кладем товары в корзину, товары имеют верстку:

254