当前位置:首页 > JavaScript

js实现搜索框

2026-02-03 03:29:18JavaScript

实现基础搜索框功能

创建一个基础的HTML搜索框结构,包含输入框和搜索按钮:

<input type="text" id="searchInput" placeholder="输入搜索内容">
<button id="searchButton">搜索</button>
<div id="searchResults"></div>

添加基本的事件监听和搜索逻辑:

document.getElementById('searchButton').addEventListener('click', function() {
  const searchTerm = document.getElementById('searchInput').value.trim();
  if (searchTerm) {
    performSearch(searchTerm);
  }
});

function performSearch(term) {
  // 模拟搜索数据
  const data = ['苹果', '香蕉', '橙子', '葡萄', '西瓜'];
  const results = data.filter(item => item.includes(term));

  displayResults(results);
}

function displayResults(results) {
  const resultsContainer = document.getElementById('searchResults');
  resultsContainer.innerHTML = '';

  if (results.length === 0) {
    resultsContainer.innerHTML = '<p>没有找到匹配的结果</p>';
    return;
  }

  const ul = document.createElement('ul');
  results.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item;
    ul.appendChild(li);
  });

  resultsContainer.appendChild(ul);
}

添加实时搜索功能

实现输入时实时触发搜索的功能:

document.getElementById('searchInput').addEventListener('input', function(e) {
  const searchTerm = e.target.value.trim();
  if (searchTerm.length >= 2) { // 至少输入2个字符才触发搜索
    performSearch(searchTerm);
  }
});

添加防抖优化

防止频繁触发搜索请求:

let debounceTimer;

document.getElementById('searchInput').addEventListener('input', function(e) {
  clearTimeout(debounceTimer);
  const searchTerm = e.target.value.trim();

  debounceTimer = setTimeout(() => {
    if (searchTerm.length >= 2) {
      performSearch(searchTerm);
    }
  }, 300); // 300毫秒延迟
});

实现搜索历史功能

添加搜索历史记录功能:

let searchHistory = [];

function addToHistory(term) {
  if (!searchHistory.includes(term)) {
    searchHistory.unshift(term);
    if (searchHistory.length > 5) {
      searchHistory.pop();
    }
    renderHistory();
  }
}

function renderHistory() {
  const historyContainer = document.getElementById('searchHistory');
  if (!historyContainer) return;

  historyContainer.innerHTML = '';
  const ul = document.createElement('ul');

  searchHistory.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item;
    li.addEventListener('click', () => {
      document.getElementById('searchInput').value = item;
      performSearch(item);
    });
    ul.appendChild(li);
  });

  historyContainer.appendChild(ul);
}

添加样式美化

为搜索框添加基本CSS样式:

#searchInput {
  padding: 8px 12px;
  width: 300px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

#searchButton {
  padding: 8px 16px;
  background-color: #4CAF50;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

#searchResults {
  margin-top: 20px;
}

#searchHistory {
  margin-top: 10px;
  color: #666;
}

完整示例代码

整合所有功能的完整实现:

js实现搜索框

<!DOCTYPE html>
<html>
<head>
  <style>
    #searchInput {
      padding: 8px 12px;
      width: 300px;
      border: 1px solid #ddd;
      border-radius: 4px;
    }
    #searchButton {
      padding: 8px 16px;
      background-color: #4CAF50;
      color: white;
      border: none;
      border-radius: 4px;
      cursor: pointer;
    }
    #searchResults {
      margin-top: 20px;
    }
    #searchHistory {
      margin-top: 10px;
      color: #666;
    }
  </style>
</head>
<body>
  <input type="text" id="searchInput" placeholder="输入搜索内容">
  <button id="searchButton">搜索</button>
  <div id="searchHistory"></div>
  <div id="searchResults"></div>

  <script>
    let searchHistory = [];
    let debounceTimer;

    document.getElementById('searchButton').addEventListener('click', function() {
      const searchTerm = document.getElementById('searchInput').value.trim();
      if (searchTerm) {
        performSearch(searchTerm);
        addToHistory(searchTerm);
      }
    });

    document.getElementById('searchInput').addEventListener('input', function(e) {
      clearTimeout(debounceTimer);
      const searchTerm = e.target.value.trim();

      debounceTimer = setTimeout(() => {
        if (searchTerm.length >= 2) {
          performSearch(searchTerm);
        }
      }, 300);
    });

    function performSearch(term) {
      const data = ['苹果', '香蕉', '橙子', '葡萄', '西瓜'];
      const results = data.filter(item => item.includes(term));
      displayResults(results);
    }

    function displayResults(results) {
      const resultsContainer = document.getElementById('searchResults');
      resultsContainer.innerHTML = '';

      if (results.length === 0) {
        resultsContainer.innerHTML = '<p>没有找到匹配的结果</p>';
        return;
      }

      const ul = document.createElement('ul');
      results.forEach(item => {
        const li = document.createElement('li');
        li.textContent = item;
        ul.appendChild(li);
      });

      resultsContainer.appendChild(ul);
    }

    function addToHistory(term) {
      if (!searchHistory.includes(term)) {
        searchHistory.unshift(term);
        if (searchHistory.length > 5) {
          searchHistory.pop();
        }
        renderHistory();
      }
    }

    function renderHistory() {
      const historyContainer = document.getElementById('searchHistory');
      if (!historyContainer) return;

      historyContainer.innerHTML = '';
      const ul = document.createElement('ul');

      searchHistory.forEach(item => {
        const li = document.createElement('li');
        li.textContent = item;
        li.addEventListener('click', () => {
          document.getElementById('searchInput').value = item;
          performSearch(item);
        });
        ul.appendChild(li);
      });

      historyContainer.appendChild(ul);
    }
  </script>
</body>
</html>

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…