Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2020, 23:22
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Фильтрация по буквам
Не могу увидеть ошибку, вроде по логике все правильно.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.input_services {
	background-image: url("../images/searchicon.png");
	background-position: 10px 7px;
	background-repeat: no-repeat;
	font-size: .6rem;
	font-style: italic;
	width: 100%;
	padding: 12px 20px 12px 40px;
	border: 1px solid #ddd;
	margin-bottom: 12px;
}
.list {
	list-style-type: none;
	padding: 0;
	margin: 0;
}
.list a {
	border: 1px solid #ddd;
	margin-top: -1px; /* Prevent double borders */
	background-color: #f6f6f6;
	padding: 12px;
	text-decoration: none;
	color: black;
	display: none;
}
.list a:hover:not(.header) {
	background-color: #eee;
}
.show{
	display: block;
}
.hide{
	display: none;
}
.my_ul a.show {
	display: block;
}
</style>
</head>

<body>
<input type="text" class="input_services" placeholder="Введите запрос, например, установка ванны">
<ul class="list">
	<li class="list_services"><a href="#">Алмазная резка</a></li>
	<li class="list_services"><a href="#">Гидроизоляция</a></li>
	<li class="list_services"><a href="#">Заливка пола</a></li>
	<li class="list_services"><a href="#">Замена канализации</a></li>
	<li class="list_services"><a href="#">Замена проводки</a></li>
	<li class="list_services"><a href="#">Замена радиаторов</a></li>
	<li class="list_services"><a href="#">Замена труб</a></li>
</ul>
<script>
let inputServices = document.querySelector(".input_services");
let filter = inputServices.value;
let list = document.querySelector(".list");
let listServices = document.querySelector(".list_services");
let a;

function services(){
	for(let i=0; i<listServices; i++){
		a =listServices[i].getElementsByTagName("a")[0];
		if(a.innerHTML.indexOf(filter)>-1){
			a.classList.add("show");
		}else{
			a.classList.remove("show");
		}
	}
}

inputServices.focus = services;
</script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2020, 23:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сергей Ракипов,
https://javascript.ru/forum/dom-wind...tml#post521854
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2020, 00:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сергей Ракипов,
строка 41 неправильный селектор
строка 60 не там
строка 62 неправильный метод
строка 66 неправильное условие
плюс сравнение зависит от регистра, может привести всё к одному регистру?
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2020, 16:57
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

<!doctype html>
<html lang="ru">
<head>
	<meta charset="utf-8">
	<title>index</title>
<style>
.input_services {
	background-image: url('../images/searchicon.png');
	background-position: 10px 8px;
	background-repeat: no-repeat;
	width: 100%;
	padding: 12px 20px 12px 40px;
	border: 1px solid #ddd;
	margin-bottom: 12px;
	font-style: italic;
}
.list {
	list-style-type: none;
	padding: 0;
	margin: 0;
}
.list a {
	border: 1px solid #ddd;
	margin-top: -1px; 
	background-color: #f6f6f6;
	padding: 12px;
	text-decoration: none;
	color: black;
	display: none;
}
.list a:hover:not(.header) {
	background-color: #eee;
}
.show{
	display: block;
}
.hide{
	display: none;
}
.list, a.show {
	display: block;
}
</style>
</head>

<body>
	<main>
	<header></header>
		<input type="text" class="input_services" onkeyup="servicesFunction()"  placeholder="Какая помощь нужна, например, установка ванны">
		<ul class="list">
			<li class="list_services"><a href="#">Алмазная резка</a></li>
			<li class="list_services"><a href="#">Гидроизоляция</a></li>
			<li class="list_services"><a href="#">Заливка пола</a></li>
			<li class="list_services"><a href="#">Замена канализации</a></li>
			<li class="list_services"><a href="#">Замена проводки</a></li>
			<li class="list_services"><a href="#">Замена радиаторов</a></li>
			<li class="list_services"><a href="#">Замена труб</a></li>
		</ul>
	</main>
<script>
let inputServices = document.querySelector(".input_services");
let list = document.querySelector(".list");
let listServices = list.querySelectorAll(".list_services");
let a;

function servicesFunction() {
	let filter = inputServices.value.toUpperCase();
	let filterNull = inputServices.value;

	for (let i = 0; i < listServices.length; i++) {
		a = listServices[i].querySelectorAll(".list_services>a")[0];
		if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
		a.classList.add("show");
		} 
		else {
		a.classList.remove("show");
		}
	}
	function test(){
		if (filterNull == ""){
		a.classList.add(".hide");
		}
	}
}
</script>
</body>
</html>

Вот поправил, сейчас не могу понять как сделать что бы если в строке пусто блок спрятать, сделал вот такое но это не работает
function test(){
		if (filterNull == ""){
		a.classList.add(".hide");
		}
	}


А еще повесил событие на input но это как бы не правильно, хочу убрать это событие в скрипт.
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2020, 17:05
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Сообщение от Сергей Ракипов
А еще повесил событие на input но это как бы не правильно, хочу убрать это событие в скрипт.
это сделал, просто был не внимательный
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2020, 17:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Сергей Ракипов
как сделать что бы если в строке пусто блок спрятать,
if (filter.trim() && a.innerHTML.toUpperCase().indexOf(filter) > -1)
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2020, 17:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Сергей Ракипов
onkeyup=
oninput
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2020, 17:22
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Узнал про trim
действительно oninput будет логичнее

Спасибо, все понятно. Благодарю за помощь.
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2020, 17:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сергей Ракипов,
на всякий случай если нужен текст, то текст и проверяйте innerHTML a.textContent.toUpperCase() , для данного случая, так как a это ссылка, можно даже так a.text.toLowerCase() (но это на любителя)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax фильтрация гуня Элементы интерфейса 0 20.12.2018 12:11
Фильтрация таблицы по селектам Anushki Элементы интерфейса 15 05.02.2018 18:27
Фильтрация эллементов через select VlAdZiO Элементы интерфейса 0 05.11.2016 15:41
вставка текста по буквам alerzo Events/DOM/Window 3 08.07.2011 09:55
Сортировка и фильтрация в селекторе amt779 jQuery 1 08.07.2011 03:09