javascript - 需要帮助在用于排序的 ul 列表中按索引调用表格行和单元格
问题描述
我有一个功能可以让你搜索一个列表,当找到匹配项时,它会隐藏所有
现在,如果您搜索“红色”一词,它会显示所有带有红色的表格。我只想显示在我传递给搜索的行和单元格中具有“红色”的表格。换句话说,在第 1 行单元格 1 中包含红色的所有表格中搜索红色。
我希望我解释清楚了。
任何帮助将不胜感激。
这是一个 LSFiddle 链接,可以查看它当前的工作方式: https ://jsfiddle.net/t205sx7d/
谢谢迈克。
<html>
<head>
<title>edit</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red" style="font-family:Arial; font-weight:bold; font-size:12pt;">
<p> <input type="text" id="searchbox"> <input type="button" value="search" onclick = "DbSearch(searchbox.value)">
click search with a empty box to show all.</p>
<p> <span id="SearchTxt">Show all</span></p>
<ul id="LsUL">
<li>
<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: table 1</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="483">Color 1:</td>
<td width="483">red</td>
</tr>
<tr>
<td width="483">Color 2:</td>
<td width="483">blue</td>
</tr>
<tr>
<td width="483">Color 3:</td>
<td width="483">green</td>
</tr>
</table>
<br>
<li>
<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: table 1</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="483">Color 1:</td>
<td width="483">blue</td>
</tr>
<tr>
<td width="483">Color 2:</td>
<td width="483">red</td>
</tr>
<tr>
<td width="483">Color 3:</td>
<td width="483">pink</td>
</tr>
</table>
<br>
<li><table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: table 1</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="483">Color 1:</td>
<td width="483">green</td>
</tr>
<tr>
<td width="483">Color 2:</td>
<td width="483">yellow</td>
</tr>
<tr>
<td width="483">Color 3:</td>
<td width="483">red</td>
</tr>
</table>
<br>
</ul>
<script>
function DbSearch(search) {
var filter, ul, li, a, i, txtValue, c=0;
filter = search.toUpperCase();
ul = document.getElementById("LsUL");
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("table")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) { li[i].style.display = ""; c+=1; }
else { li[i].style.display = "none"; }
}
if (search == "") {SearchTxt.innerHTML = "Showing all records."}
else {SearchTxt.innerHTML = "Searched: " +search+ " Found: " +c;}
}
</script>
</body>
</html>
解决方案
我看到你的桌子里面有一个桌子头。我所做的是,在除 head 之外的所有行上,我添加了一个 class data
。这表明我们在这些行中有数据。
现在每次搜索时,我们都会查看每个表的这些数据行。如果存在具有所需索引 (1) 的行并且存在具有所需索引 (1) 的单元格,我们将显示该表。
这是 JSFiddle 演示:JSFiddle
这是代码:
HTML
<html>
<head>
<title>edit</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red" style="font-family:Arial; font-weight:bold; font-size:12pt;">
<p> <input type="text" id="searchbox"> <input type="button" value="search" onclick = "DbSearch(searchbox.value)">
click search with a empty box to show all.
</p>
<p> <span id="SearchTxt">Show all</span></p>
<ul id="LsUL">
<li>
<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: tb1</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr class="data">
<td width="483">Color 1:</td>
<td width="483">red</td>
</tr>
<tr class="data">
<td width="483">Color 2:</td>
<td width="483">blue</td>
</tr>
<tr class="data">
<td width="483">Color 3:</td>
<td width="483">green</td>
</tr>
</table>
<br>
<li>
<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: tb2</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr class="data">
<td width="483">Color 1:</td>
<td width="483">blue</td>
</tr>
<tr class="data">
<td width="483">Color 2:</td>
<td width="483">red</td>
</tr>
<tr class="data">
<td width="483">Color 3:</td>
<td width="483">pink</td>
</tr>
</table>
<br>
<li>
<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="90%">
<tr>
<td width="970" align="center" colspan="2" style="padding-top:5px; padding-bottom:5px;">
<table cellspacing="4" width="96%" bordercolordark="white" bordercolorlight="black" style="border-width:2px; border-color:blue; border-style:solid;" cellpadding="4" bgcolor="#CCCCCC">
<tr>
<td width="316" bgcolor="#666666"><font color="white"><b>edit</b></font></td>
<td width="316" align="center"><b>id: tb3</b></td>
<td width="316" align="right" bgcolor="#666666"><font color="white"><b>delete</b></font></td>
</tr>
</table>
</td>
</tr>
<tr class="data">
<td width="483">Color 1:</td>
<td width="483">green</td>
</tr>
<tr class="data">
<td width="483">Color 2:</td>
<td width="483">yellow</td>
</tr>
<tr class="data">
<td width="483">Color 3:</td>
<td width="483">red</td>
</tr>
</table>
<br>
</ul>
</body>
</html>
Javascript
function DbSearch(search) {
var filter, ul, li, a, i, txtValue, c = 0;
filter = search.toUpperCase();
ul = document.getElementById("LsUL");
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("table")[0];
var cells = a.querySelectorAll(".data")
// txtValue = a.textContent || a.innerText;
if (cells[1]) { // The row you want to search
var cols = cells[1].querySelectorAll("td");
if (cols[1]) { // The col you want to search
txtValue = cols[1].innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "block";
c += 1;
} else {
li[i].style.display = "none";
}
}
}
}
if (search == "") {
SearchTxt.innerHTML = "Showing all records."
} else {
SearchTxt.innerHTML = "Searched: " + search + " Found: " + c;
}
}
一个友好的建议:请在粘贴之前格式化您的代码,您可以使用HTML 格式化程序和Javascript 格式化程序,或任何其他工具。在线寻找任何语言的格式化程序或美化器,你会找到工具:)
推荐阅读
- reactjs - React setState is not a function upon adding JSON?
- java - List.add(list) 和 List.add(stringbuilder.toString) 的区别
- jquery - 如何正确使用 jQuery This?
- service - 具有依赖关系的健康检查和应用程序服务器
- css - 在一个父 div 中等距放置两个 div,其中一个 div 的位置为固定
- visual-studio-code - 我可以在 VSCode 调试任务的启动命令前添加一个令牌(例如“时间”)吗?
- postgresql - pg-promise helpers insert 插入时跳过的替代方法是什么?
- git - 硬重置或将文件恢复到其他位置,这样它就不会影响我当前的文件
- java - 使用 getResponseCode (HttpUrlConnection) 后是否需要关闭 inputStream
- python - 已删除消息的返回消息