如何使用JavaScript正确实现按卡片内容筛选项目的功能
问题原因
- JS代码中
getElementByClassName拼写错误,正确的DOM API是getElementsByClassName(末尾多一个s),该错误会导致卡片列表获取失败,后续逻辑直接中断 - 原有显隐逻辑只控制
.card节点,外层包裹的.col-lg-2.col-md-3容器仍然占位,即使卡片隐藏也会残留空白区域 - HTML代码中第二个卡片外层的col闭合标签漏写了
>,存在语法错误
修正后完整代码
JavaScript代码
function searchProduct(){ // 获取搜索框输入,转大写并去除首尾空格 const input = document.getElementById('filter').value.toUpperCase().trim(); const cardContainer = document.getElementById('card-list'); // 直接获取卡片外层的col容器,方便统一控制显隐 const cardWrappers = cardContainer.querySelectorAll('.col-lg-2.col-md-3'); for(let i = 0; i < cardWrappers.length; i++){ let title = cardWrappers[i].querySelector(".body h5.card-title"); // 容错处理,避免找不到标题节点时报错 if(!title) continue; // 匹配搜索关键词 if(title.innerText.toUpperCase().includes(input)) { cardWrappers[i].style.display = ""; } else { cardWrappers[i].style.display = "none"; } } }
HTML代码
<div class="row"> <div class="col-lg-7 col-md-8 col-sm-12 col-xs-12"> <input type="text" id="filter" onkeyup="searchProduct()" placeholder="ME INFORME O NOME DA CONSTRUTORA ..."> </div> </div><br> <div id="card-list"> <div class="col-lg-2 col-md-3"> <div class="card hvr-grow cbox"> <div class="body"> <div class="header"><div class="card-status-orange">AGUARDANDO ...</div></div> <h5 class="card-title">ADSM</h5> <div class="card-footer">21/10/2021</div> <a href="" alt="Avatar" style="width:100%; border-radius: 10px;"></a> </div> </div> </div> <div class="col-lg-2 col-md-3"> <div class="card hvr-grow cbox"> <div class="body"> <div class="header"><div class="card-status-orange">AGUARDANDO ...</div></div> <h5 class="card-title">ALFA DO BRASIL</h5> <div class="card-footer">21/10/2021</div> <a href="" alt="Avatar" style="width:100%; border-radius: 10px;"></a> </div> </div> </div> </div>
内容的提问来源于stack exchange,提问作者Mike Otharan
相关产品推荐
相关产品推荐

