Я пытаюсь создать простой фильтровать по мере ввода для моей панели навигации, у меня есть следующее, но, похоже, работает неправильно:
$("input[id='gameSearch']").on('keydown', function(e) {
var input, filter, ul, li, a, i;
input = $(this);
filter = input.val().toUpperCase();
div = $('#gamesDropdown');
a = div.querySelectorAll("li a");
for (i = 0; i < a.length; i++) {
if (a[i].html().toUpperCase().indexOf(filter) > -1) {
a[i].style.display = "";
} else {
a[i].style.display = "none";
}
}
});
У меня есть макет HTML как таковой:
<ul id = "gamesDropdown">
<li>
<input type = "text" id = "gameSearch" placeholder = "Search...">
<li>
<li>
<a href = "#blah">Blah blah</a>
<li>
<li>
<a href = "#blah">Blah blah</a>
<li>
<li>
<a href = "#blah">Blah blah</a>
<li>
</ul>
Ошибка:
Uncaught TypeError: div.querySelectorAll is not a function
Это устарело или я просто использую неправильно?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


querySelectorAll предназначен для vanilla js, вы можете:
a = div.get().querySelectorAll("li a");
а затем придерживайтесь vanilla js, или вы можете сделать
a = div.find("li a");
и тогда a будет объектом jQuery, поэтому вы можете сделать .html() так же, как и позже в своем коде, но это должно быть примерно так:
a = div.find("li a");
a.each(function() {
if ($(this).html().toUpperCase().indexOf(filter) > -1) {
$(this).css('display', '');
} else {
$(this).css('display', 'none');
}
})
Используйте метод get(), чтобы получить ссылку на элемент DOM:
$("input[id='gameSearch']").on('keydown', function(e) {
var input, filter, ul, li, a, i;
input = $(this);
filter = input.val().toUpperCase();
div = $('#gamesDropdown');
a = div.get(0).querySelectorAll("li a");
for (i = 0; i < a.length; i++) {
if ($(a[i]).html().toUpperCase().indexOf(filter) > -1) {
a[i].style.display = "";
} else {
a[i].style.display = "none";
}
}
});