Фильтруемый список Traversy - PullRequest
1 голос
/ 26 июня 2019

Я только что посмотрел видеофильм со списком Traversy и

Понятия не имею, почему мы должны ставить [0] после getElementsByTagName ("a")

Поскольку в файле HTML есть только один тег "a",

Я думал, что мне не нужно ставить [0] после getElementsByTagName ("a").

Но без этого не получается.

Пожалуйста, кто-нибудь, объясните мне

Большое спасибо

// Get input element

let filterInput = document.getElementById("filterInput");

// Add Event Listener

filterInput.addEventListener("keyup", filterNames);

function filterNames() {
  // Get values of input
  let filterValue = filterInput.value.toUpperCase();

  // Get names ul
  let ul = document.getElementById("names");

  // Get lis from ul
  let li = ul.querySelectorAll("li.collection-item");
  console.log(li);
  // Loop through collection-item lis
  for (let i = 0; i < li.length; i++) {
    let a = li[i].getElementsByTagName("a")[0];
    console.log(a);
    // If matched
    if (a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
      li[i].style.display = "";
    } else {
      li[i].style.display = "none";
    }
  }
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" />

  <title>Filterable List</title>
</head>

<body>
  <div class="container">
    <h1 class="center-align">My Contacts</h1>
    <input type="text" id="filterInput" placeholder="Searchi Names..." />
    <ul id="names" class="collection with-header">
      <li class="collection-header">
        <h5>A</h5>
      </li>
      <li class="collection-item">
        <a href="#">Abe</a>
      </li>
      <li class="collection-item">
        <a href="#">Adam</a>
      </li>
      <li class="collection-item">
        <a href="#">Alan</a>
      </li>
      <li class="collection-item">
        <a href="#">Anna</a>
      </li>
      <li class="collection-header">
        <h5>B</h5>
      </li>
      <li class="collection-item">
        <a href="#">Bob</a>
      </li>
      <li class="collection-item">
        <a href="#">Beth</a>
      </li>
      <li class="collection-item">
        <a href="#">Bill</a>
      </li>
      <li class="collection-item">
        <a href="#">Bread</a>
      </li>
      <li class="collection-header">
        <h5>C</h5>
      </li>
      <li class="collection-item">
        <a href="#">Carrie</a>
      </li>
      <li class="collection-item">
        <a href="#">Cathy</a>
      </li>
      <li class="collection-item">
        <a href="#">Chloe</a>
      </li>
      <li class="collection-item">
        <a href="#">Candy</a>
      </li>
    </ul>
  </div>
  <script src="app.js"></script>
  <!-- <script src="app2.js"></script> -->
</body>

</html>

1 Ответ

0 голосов
/ 26 июня 2019

Это потому, что getElementsByTagName возвращает массив элементов, содержащих указанный тег.Согласно документации вы увидите:

Метод getElementsByTagName () возвращает коллекцию всех элементов в документе с указанным именем тега в виде объекта NodeList

Поскольку у вас есть только один элемент с этим тегом, вы должны добавить [0], чтобы получить его.«[0]» соответствует элементу FIRST в коллекции.Если бы у вас был второй элемент, вы бы получили его, используя [1] и т. Д., Как если бы вы использовали массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...