#jquery #search #filter #alt
Вопрос:
Я создаю страницу поиска для галереи изображений на основе тега alt. В конечном итоге в галерее будет более 3000 фотографий. Отображаются только изображения, соответствующие тексту из строки поиска. Страница обновляется по мере ввода, отражая текущие совпадения. До сих пор у меня есть хорошая рабочая модель, благодаря публикациям, которые я нашел здесь, посвященным почти той же задаче. Мне нужно, чтобы мой фильтр поиска был нечувствителен к регистру и пробелам. Мой текущий код работает почти так, как задумывалось, с одной небольшой проблемой. При вводе из строки поиска не будет отображаться совпадений для цифровых символов в теге alt.
$('img').hide();
$("#myinput").keyup(function() {
var val = $.trim(this.value);
val = val.split(" ").join("\ ");
if (val === "")
$('img').hide();
else {
$('img').hide();
$("img[alt*=" val " i]").show();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="myinput" name="search" placeholder="search..." style="width:200px; height: 40px; border-radius: 4px; font-size: 18px;"><br>
<div id="images">
<a href="https://example.com"><img src="https://picsum.photos/id/100/200/300" alt="Beach 194888" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1002/200/300" alt="Earth 2069" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1003/200/300" alt="Bambi" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1015/200/300" alt="River" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1027/200/300" alt="Roksolana Zasiadko" width=130></a>
</div>
Ответ №1:
Это будет фильтровать ввод без учета регистра с цифрами или без цифр
const $img = $("#images img");
$("#myinput").on("input",function() {
$img.hide();
const val = this.value.trim().toLowerCase();
if (val === "") return;
$img.filter(function() { return this.alt.toLowerCase().includes(val) }).show()
});
#images img { display: none }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="myinput" name="search" placeholder="search..." style="width:200px; height: 40px; border-radius: 4px; font-size: 18px;"><br>
<div id="images">
<a href="https://example.com"><img src="https://picsum.photos/id/100/200/300" alt="Beach 194888" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1002/200/300" alt="Earth 2069" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1003/200/300" alt="Bambi" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1015/200/300" alt="River" width=130></a>
<a href="https://example.com"><img src="https://picsum.photos/id/1027/200/300" alt="Roksolana Zasiadko" width=130></a>
</div>
Комментарии:
1. @Tim — я сократил его. СУХОЙ — не нужно прятаться дважды