【问题标题】:Autohide rows when there is no query in search box搜索框中没有查询时自动隐藏行
【发布时间】:2017-07-24 20:35:25
【问题描述】:

我对 java 编码完全陌生。我有一个帐户列表,用于显示正确的收集器(超过 5000 行)。我已经使用一些在线帮助将其转换为 HTML 网页。

现在我希望当搜索框中没有查询时,下表中不应该有任何结果,只有标题应该出现。一旦我开始输入任何客户名称并且如果有任何匹配项,它就会显示出来,一旦我删除查询,列表就会消失。

以下是我目前使用的代码。

<!DOCTYPE html>
<html>
<head>
<style>
* {
  box-sizing: border-box;
}

#myInput {
  background-image: url('/css/searchicon.png');
  background-position: 10px 10px;
  background-repeat: no-repeat;
  width: 26%;
  font-size: 16px;
  padding: 12px 20px 12px 40px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
}

#myTable {
  border-collapse: collapse;
  width: 100%;
  border: 1px solid #ddd;
  font-size: 12px;
}

#myTable th, #myTable td {
  text-align: left;
  padding: 2px;
}

#myTable tr {
  border-bottom: 1px solid #ddd;
}

#myTable tr.header, #myTable tr:hover {
  background-color: #f1f1f1;
}
</style>
</head>
<body>
<img src="res/logo.jpg" style="width:350px;height:100px;">

<h2><font face="Arial" color="#c11919">Collector Lookup Tool - Test Phase</font></h2>

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for customer names" title="Type in a name">
<table id="myTable">
  <tr class="header">
    <th style="width:20%;">Customer Name</th>
    <th style="width:10%;">Collector Name</th>
    <th style="width:15%;">Collector e-mail</th>
    <th style="width:10%;">Region</th>
    <th style="width:20%;">Telnet</th>
  </tr>
<tr><td>110 Technology LLC</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
<tr><td>14 WFIE TV</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
<tr><td>2Wire Inc</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
<tr><td>3 Phoenix LLC</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
<tr><td>3 Sixty Mfg</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
<tr><td>3D at Depth LLC</td><td>Abhishek Yadav</td><td>abhishek.yadav@gmail.com</td><td>Americas</td><td>2684227</td></tr>
.
.
.
.
.
.
</table>

<script>
function myFunction() {
  var input, filter, table, tr, td, i;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    if (td) {
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }       
  }
}
</script>
</body>
</html>

【问题讨论】:

标签: javascript html css row hide


【解决方案1】:

一个选项是使用表上的一个类隐藏所有行,直到您检测到框中的更改。例如,该类可能是:

.hidden tr+tr{
  display: none;
}

所有tr+tr 正在做的就是说所有trs 在tr 之后,这样我们就不会隐藏标题。

在表格上添加这个类开始,然后在函数中添加一行看起来像这样的行:

if(filter == ''){
    table.classList.add("hidden");
} else {
    table.classList.remove("hidden");
}

这将在没有输入时隐藏内容,并在框中有内容时取消隐藏。

【讨论】:

  • 感谢唐的回答。对不起,我是编码方面的新手。您能否在我上面的代码或下面给出的链接中的 html 中应用您的解决方案,并通过 prateekvishwas22@gmail.com 与我分享? drive.google.com/file/d/0B_a89TkNd6sCVGRyNzd6UlI0VDA/view
  • 我不会为你做这项工作,我已经很好地解释了如何把它放进去。你不会知道人们是否为你做这件事,只需添加它的地方并考虑它在哪里发生是有意义的。如果您对任何代码的作用有任何疑问,我很乐意解释。
  • 谢谢唐。如果我需要进一步的帮助,我会回复你。非常感谢。
  • 是否完整的类代码? .hidden tr+tr{ 显示:无;在 .hidden.... 之前我不需要任何东西或 myTable 吗?
  • 您可以使用#myTable.hidden tr+tr 并且更详细一些,但是我发布它的方式会起作用,并且如果您在页面中添加另一个表,它将适用于任何具有隐藏类的表。确保#myTable.hidden 之间放置一个空格,否则您将选择#myTable 的子元素,它们的类为hidden,而不是id 为myTable 的元素也有类hidden
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2021-04-21
  • 2013-01-20
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多