Фильтрация по буквам
Не могу увидеть ошибку, вроде по логике все правильно.
<!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> |
Сергей Ракипов,
https://javascript.ru/forum/dom-wind...tml#post521854 |
Сергей Ракипов,
строка 41 неправильный селектор строка 60 не там строка 62 неправильный метод строка 66 неправильное условие плюс сравнение зависит от регистра, может привести всё к одному регистру? |
<!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 но это как бы не правильно, хочу убрать это событие в скрипт. |
Цитата:
|
Цитата:
|
Цитата:
|
Узнал про trim
действительно oninput будет логичнее Спасибо, все понятно. Благодарю за помощь. |
Сергей Ракипов,
на всякий случай если нужен текст, то текст и проверяйте |
Часовой пояс GMT +3, время: 12:38. |