实现友链搜索功能
402 字
2 分钟
实现友链搜索功能
搜索框代码
<!-- 搜索框 --> <div class="mb-4"> <div class="relative"> <input type="text" id="friend-search" placeholder="搜索友链..." class="w-full px-4 py-2.5 pl-10 rounded-lg border border-(--line-divider) bg-(--card-bg) text-neutral-900 dark:text-neutral-100 placeholder-neutral-400 dark:placeholder-neutral-500 focus:outline-none focus:border-(--primary) focus:ring-2 focus:ring-(--primary)/20 transition-all duration-200" /> <Icon name="material-symbols:search" class="absolute left-3 top-1/2 -translate-y-1/2 text-neutral-400 dark:text-neutral-500 text-xl" /> <button id="clear-search" class="absolute right-3 top-1/2 -translate-y-1/2 text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors hidden" aria-label="清除搜索" > <Icon name="material-symbols:close" class="text-lg" /> </button> </div> </div>
<!-- 无搜索结果提示 --> <div id="no-results" class="hidden text-center py-12"> <Icon name="material-symbols:search-off-rounded" class="text-5xl text-neutral-300 dark:text-neutral-600 mx-auto mb-3" /> <p class="text-neutral-500 dark:text-neutral-400">未找到匹配的友链</p> <p class="text-sm text-neutral-400 dark:text-neutral-500 mt-1">请尝试其他关键词</p> </div>友链搜索功能
if (!customElements.get("friend-filter")) { // 其他代码 } // 友链搜索功能 (function() { // 确保 DOM 加载完成后再执行 function initSearch() { const searchInput = document.getElementById('friend-search'); const clearBtn = document.getElementById('clear-search'); const noResults = document.getElementById('no-results'); const cards = document.querySelectorAll('.friend-card');
if (!searchInput || cards.length === 0) { return; // DOM 还未加载完成,稍后重试 }
let debounceTimer;
// 防抖函数 function debounce(func, delay) { return function(...args) { clearTimeout(debounceTimer); debounceTimer = setTimeout(() => func.apply(this, args), delay); }; }
// 搜索过滤逻辑 function performSearch(query) { const searchTerm = query.toLowerCase().trim(); let visibleCount = 0;
cards.forEach((card) => { const title = (card.querySelector('.font-bold')?.textContent || '').toLowerCase(); const desc = (card.querySelector('.line-clamp-1')?.textContent || '').toLowerCase(); const url = (card.href || '').toLowerCase();
if ( searchTerm === '' || title.includes(searchTerm) || desc.includes(searchTerm) || url.includes(searchTerm) ) { card.style.display = ''; card.classList.add('animate-fade-in-up'); visibleCount++; } else { card.style.display = 'none'; card.classList.remove('animate-fade-in-up'); } });
// 显示/隐藏无结果提示 if (noResults) { if (visibleCount === 0 && searchTerm !== '') { noResults.classList.remove('hidden'); } else { noResults.classList.add('hidden'); } } }
// 绑定搜索事件(带防抖) searchInput.addEventListener('input', debounce(function(e) { const query = e.target.value; performSearch(query);
// 显示/隐藏清除按钮 if (clearBtn) { if (query.length > 0) { clearBtn.classList.remove('hidden'); } else { clearBtn.classList.add('hidden'); } } }, 200));
// 绑定清除按钮 if (clearBtn) { clearBtn.addEventListener('click', function() { searchInput.value = ''; performSearch(''); this.classList.add('hidden'); searchInput.focus(); }); } }
// 监听 DOM 加载完成事件 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initSearch); } else { initSearch(); } })();支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
相关文章 智能推荐
1
待办
Firefly 基于Firefly主题二次修改的待办事项
2
快速开始
Firefly Firefly 是一款基于 Astro 框架和 Fuwari 模板开发的清新美观且现代化个人博客主题,专为技术爱好者和内容创作者设计
3
年轻的时候是旅游重要还是攒钱重要?
旅行 年轻的时候是旅游重要还是攒钱重要?
随机文章 随机推荐