Как я могу определить свою переменную?

// Я получаю ошибку typeError a is undefined. Тем не менее, я пытался объявить свою переменную поверх своего кода, но она все еще не работает.

  // Get input element
  let filter = document.getElementById('filter');
  // Add event listener
  filter.addEventListener('keyup', filterNames);



  function filterNames() {
    // Get value of input
    let filterValue = document.getElementById('filter').value.toUpperCase();

    // Get names ul
    let ul = document.getElementById('names');
    // Get lis from ul
    let li = ul.querySelectorAll('li.list-group-item');

    // Loop through collection-item lis
    for (let i = 0; i < li.length; i++) {

         let a = li[i].getElementsByTagName('a')[0];
        // If matched
        if (a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
            li[i].style.display = '';

        } else {
            li[i].style.display = 'none';
        }
    }

}

Вы уверены, что у вас есть a в каждом li?

Muhammad Usman 16.08.2018 09:03

У вас может быть элемент li без каких-либо a. Таким образом, получение li[i].getElementsByTagName('a')[0] undefined.

mishik 16.08.2018 09:03

Вероятно, вам следует проверить, возвращает ли a узел или нет, прежде чем продолжить

Terry 16.08.2018 09:04
Поведение ключевого слова "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
3
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Основываясь на вашем вопросе, я попытался воспроизвести то же самое

HTML

<input type = "text" id = "filter" />


<ul id = "names" class = "list-group">
  <li class = "list-group-item"><a>First item</a></li>
  <li class = "list-group-item"><a>Second item</a></li>
  <li class = "list-group-item"><a>Third item</a></li>
</ul>

JS:

// Get input element
  let filter = document.getElementById('filter');
  // Add event listener
  filter.addEventListener('keyup', filterNames);



  function filterNames() {
    // Get value of input
    let filterValue = document.getElementById('filter').value.toUpperCase();

    // Get names ul
    let ul = document.getElementById('names');
    // Get lis from ul
    let li = ul.querySelectorAll('li.list-group-item');

    // Loop through collection-item lis
    for (let i = 0; i < li.length; i++) {

         let a = li[i].getElementsByTagName('a')[0];
        // If matched
        if (a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
            li[i].style.display = '';

        } else {
            li[i].style.display = 'none';
        }
    }

}

если в этой строке нет его ошибки бросания

let a = li[i].getElementsByTagName('a')[0];

поскольку нет

рабочая рабочий пример

Скорее всего, проблема в том, что у вас нет a в каждом вашем li, и в результате let a = li[i].getElementsByTagName('a')[0]; вы получаете undefined. Так что вам лучше добавить чек, чтобы продолжить, например

for (let i = 0; i < li.length; i++) {

     let a = li[i].getElementsByTagName('a')[0];
    // If matched
    if (a && a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
        li[i].style.display = '';

    } else {
        li[i].style.display = 'none';
    }
}

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