JQuery querySelectorAll не работает?

Я пытаюсь создать простой фильтровать по мере ввода для моей панели навигации, у меня есть следующее, но, похоже, работает неправильно:

$("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

Это устарело или я просто использую неправильно?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
101
2

Ответы 2

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";
              }
          }
      });

Другие вопросы по теме