javascript - 使用提交按钮实时搜索
问题描述
我想使用 jquery 和一点香草 javascript 进行实时搜索,我尝试了以下代码:
HTML
<input type="text" id="myInput" placeholder="Type to search">
<button type="button" onclick="searchKey()">Serch</button>
<table id="table">
<tr>
<td>Apple</td>
<td>Green</td>
</tr>
<tr>
<td>Grapes</td>
<td>Green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
</table>
JAVACRIPT
var $rows = $('#table tr');
function searchKey()
{
var val = $.trim($('#myInput').val()).replace(/ +/g, ' ').toLowerCase();
$rows.show().filter(function() {
var text = $('#myInput').text().replace(/\s+/g, ' ').toLowerCase();
return !~text.indexOf(val);
}).hide();
}
但是表格中的内容反而消失了,不起作用,但是当我为空时,再次点击提交,内容再次出现,我想适合搜索,例如“p”出来的内容有单击提交按钮时的字母“p”。我希望当我删除搜索输入时,表格中的所有内容立即再次出现,而无需单击提交按钮。
解决方案
如果文本存在于td
使用中,您可以通过添加/删除 CSS 类来隐藏和显示元素hide
const rows = document.querySelectorAll("table tr");
function searchKey() {
var val = $.trim($('#myInput').val()).replace(/ +/g, ' ').toLowerCase();
rows.forEach(row => {
const elements = [...row.children];
if (!elements.some(el => el.textContent.toLowerCase().includes(val)))
row.classList.add("hide");
else row.classList.remove("hide");
})
}
.hide {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="myInput" placeholder="Type to search">
<button type="button" onclick="searchKey()">Search</button>
<table id="table">
<tr>
<td>Apple</td>
<td>Green</td>
</tr>
<tr>
<td>Grapes</td>
<td>Green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
</table>
推荐阅读
- c# - 子表键中的 EF Core Table-Per-Type 继承键与父表不同
- android - 构建本地模块以通过 npm 安装但无法链接 android 模块
- python - Python OS 库:mkdir 和 chdir 在同一行?
- python - 从字符串中删除非字母数字字符并将字符串单词拆分为列表以查看是否已使用正则表达式满足条件
- node.js - 节点 js 应用程序中的 TikTok Api 问题
- elisp - 无法将变量传递给安全哈希
- kotlin - Kotlin 是否支持成员密封覆盖?
- jquery - 在 jquery 中制作一个选择器以将对象放入数组中
- flutter - Flutter 应用程序在播放音频哔声时停止背景音乐
- static - 重新加载静态页面时未调用 Next.js getInitialProps() 方法