You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过名称过滤电影元素?JavaScript搜索过滤实现求助

实现电影搜索过滤功能的完整指南

嘿,我来帮你搞定这个电影搜索过滤功能!其实逻辑很简单,我一步步给你讲,保证你能看懂~

1. 先补全你的HTML结构

你提供的页面代码片段可以补充成完整的结构,我帮你加上搜索输入框和电影卡片容器(卡片里用data-title属性存电影标题,方便后续JS快速获取):

<header>
  <div class="container">
    <div id="branding">
      <h1><span id="logo">mov</span>BLANK</h1>
    </div>
    <nav>
      <ul>
        <!-- 新增搜索输入框 -->
        <li><input type="text" id="searchInput" placeholder="搜索电影..."></li>
      </ul>
    </nav>
  </div>
</header>

<!-- 电影卡片容器 -->
<div class="movie-container">
  <div class="movie-card" data-title="Annihilation">
    <h3>Annihilation</h3>
    <!-- 这里可以加海报、简介等自定义内容 -->
  </div>
  <div class="movie-card" data-title="Bomb x City">
    <h3>Bomb x City</h3>
  </div>
  <div class="movie-card" data-title="The Commuter">
    <h3>The Commuter</h3>
  </div>
</div>

2. 加一点基础样式(可选)

为了让页面布局更舒服,我写了点简单的CSS,你可以直接用:

.movie-container {
  display: flex;
  gap: 20px;
  padding: 20px;
  flex-wrap: wrap;
}

.movie-card {
  border: 1px solid #ddd;
  padding: 15px;
  width: 200px;
  border-radius: 8px;
}

#searchInput {
  padding: 8px;
  border-radius: 4px;
  border: 1px solid #ddd;
  margin-left: 10px;
}

3. 核心JavaScript逻辑(重点)

这部分是实现搜索过滤的关键,每一行都加了注释,你能轻松看懂:

// 获取页面上的搜索输入框和所有电影卡片
const searchInput = document.getElementById('searchInput');
const movieCards = document.querySelectorAll('.movie-card');

// 监听输入框的输入事件(用户每输入/删除一个字符就触发)
searchInput.addEventListener('input', function() {
  // 获取输入的关键词,转成小写——这样搜索"ann"和"ANN"都能匹配到目标电影
  const keyword = this.value.toLowerCase();
  
  // 遍历每一张电影卡片,逐个检查是否匹配
  movieCards.forEach(card => {
    // 获取卡片对应的电影标题,同样转成小写
    const title = card.dataset.title.toLowerCase();
    
    // 检查标题是否包含关键词:匹配就显示卡片,不匹配就隐藏
    if (title.includes(keyword)) {
      card.style.display = 'block';
    } else {
      card.style.display = 'none';
    }
  });
});

小补充:如果你的电影标题是在<h3>里怎么办?

如果不想用data-title属性,也可以直接从卡片里的<h3>标签读取标题,把上面的const title = ...改成:

const title = card.querySelector('h3').textContent.toLowerCase();

4. 进阶优化:防抖(可选)

如果用户快速输入关键词,上面的代码会频繁执行DOM操作,有点浪费性能。可以加个防抖函数,让搜索逻辑在用户停止输入300毫秒后再执行,提升体验:

// 防抖函数:延迟执行传入的函数,避免频繁触发
function debounce(func, delay = 300) {
  let timeoutId;
  return function() {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(this, arguments), delay);
  };
}

// 把监听事件换成防抖后的函数
searchInput.addEventListener('input', debounce(function() {
  const keyword = this.value.toLowerCase();
  
  movieCards.forEach(card => {
    const title = card.dataset.title.toLowerCase();
    // 用三元运算符简化显示/隐藏的判断代码
    card.style.display = title.includes(keyword) ? 'block' : 'none';
  });
}));

这样就完成啦!你可以把这些代码放到你的页面里测试,输入"ann"就只会显示《Annihilation》的卡片了~

内容的提问来源于stack exchange,提问作者Moreover1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:53