Traversy 的可过滤列表

Posted

技术标签:

【中文标题】Traversy 的可过滤列表【英文标题】:Traversy's Filterable list 【发布时间】:2019-11-07 22:33:09 【问题描述】:

我刚刚观看了 视频,并且

我不知道为什么要把 [0] 放在 getElementsByTagName("a") 之后

由于 html 文件中只有一个“a”标签,

我认为我不需要在 getElementsByTagName("a") 之后放置 [0]。

但没有它就行不通。

请有人给我解释一下

非常感谢

// 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>

【问题讨论】:

getElementsByTagName 总是返回集合数组。因此,在您的情况下,查看用于访问第一个元素的每个 &lt;li&gt;' - There is only one ` - li[i].getElementsByTagName("a")[0] 【参考方案1】:

这是因为 getElementsByTagName 返回一个包含指定标签的元素数组。根据您将看到的文档:

getElementsByTagName() 方法返回所有元素的集合 在具有指定标签名称的文档中,作为 NodeList 对象

由于您只有一个带有该标签的元素,因此您必须添加 [0] 才能获得它。 “[0]”对应于集合中的第一个元素。如果你有第二个元素,你可以通过使用 [1] 等等来获得它,就像使用数组一样。

【讨论】:

以上是关于Traversy 的可过滤列表的主要内容,如果未能解决你的问题,请参考以下文章

Kendo Grid 可过滤单元格

Maven 中的可选过滤器文件

Django 过滤器是不是存在 json 中的可选键

MS Access + Postgres 口音/不区分大小写的可编辑过滤器

我的可过滤适配器正在查找结果但未显示

如何在将在 RemoteView 中使用的可绘制对象上设置颜色过滤器?