Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2017, 16:57
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Фильтр слов через инпут
Хочу сделать фильтр он же поиск элементов на странице (не знаю как правильно это назвать).
Похожий пример того что мне нужно - карта в учебнике этого сайта https://learn.javascript.ru/?map , где при вводе поискового значения несоответствующие пункты исчезают, а остаются те у которых есть совпадение.

Нужно чтобы при вводе в input из списка скрывались несоответствующие поиску пункты.
HTML:
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Поиск">
<div class="row">
	<div class="col-4"><span class="list"><i class="fa fa-home"></i>Солнце</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-newspaper-o"></i>Вилка</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-home"></i>Кран</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-home"></i>Соль</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-newspaper-o"></i>Пакет</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-tags"></i>Аквариум</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-newspaper-o"></i>Велосипед</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-home"></i>Крыло</span></div>
	<div class="col-4"><span class="list"><i class="fa fa-tags"></i>Кастрюля</span></div>
</div>

Подключена jQuery-3.2.1
Со скриптом у меня проблема, что-то не то делаю - нужна помощь
function myFunction() {
	var input, filter, list, li, i, a;
	input = $('#myInput');
	filter = input.val().toUpperCase();
	list = $('.list');

       //Массив из list
       var li = list.map(function(){
         return $(this).text();
       }).get();

	console.log(li);

	for (var i = 0; i < li.length; i++) {
		a = li[i];
		if(a.val().toUpperCase().index(filter) > -1) {
			li[i].show();
		} else{
			li[i].hide();
		}
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2017, 17:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

MC-XOBAHCK, у строки есть метод "index"?
М.б. "indexOf"?

PS. и сравнение строк можно было в методе "map" произвести; переменная input избыточна.
PPS. Зачем применять метод "get" в строке 10?

Последний раз редактировалось Nexus, 03.11.2017 в 17:09.
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2017, 17:12
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

MC-XOBAHCK,
А также
li[i] - это не объект, а текст из объекта,
соответственно, li[i].show(); li[i].hide();
не работают
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести через JS данные lmi2002 AJAX и COMET 4 29.05.2017 13:39
отправка данных в инпут через AJAX imediasun1 Элементы интерфейса 2 30.01.2013 18:06
Как правильно загрузить через framework Mateus jQuery 5 11.01.2013 20:08
Перенос Name элемента через Jquery titanrat Общие вопросы Javascript 2 05.12.2012 14:20
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44