html 根据标记中的href属性值筛选表< a>,并在子行与搜索值匹配时显示父行

afdcj2ne  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(74)

我试图根据href值搜索和过滤下表。我的代码适用于表中显示的所有列,并显示相应的行,但在href属性中搜索字符串时不起作用。
例如,当我在搜索栏中搜索Google时,我需要显示包含https://www.google.comhref值的行。
我到处寻找解决办法,但没有找到。有谁能帮助我,或者告诉我在哪里可以找到答案吗?
还有,有没有一种方法可以在不使用id属性的情况下将父行和子行分配给表,以便当搜索和过滤返回子行时,我也希望显示相应的父行?
我在jsfiddle上的代码-JsFiddle
超文本标记语言:

<body>
  <div>
    <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for website..">
    <button type="submit">Search</button>
  </div>

  <table border="0" id="myTable">
    <thead hidden>
      <tr>
        <th>Name</th>
        <th>URL</th>
      </tr>
    </thead>

    <tbody>
      <tr class="header clickable-row" style="cursor:pointer" data-toggle="true">
        <td colspan="2">
          <label style="cursor:pointer">Parent Row 1</label>
        </td>
      </tr>
      <tr class="hide collapse" style="display:none">
        <td>
          <h4>Column1</h4>
        </td>
        <td>
          <a class="connectorlink" href="https://google.com" target="_blank">website</a>
        </td>
      </tr>
      <tr class="hide collapse" style="display:none">
        <td>
          <h4>Column1</h4>
        </td>
        <td>
          <a class="connectorlink" href="https://yahoo.com" target="_blank">website</a>
        </td>
      </tr>
    </tbody>
  </table>
</body>

JavaScript

$(document).ready(function() {
  $('tr.header').click(function() {
    $(this).find('span').text(function(_, value) {});
    $(this).nextUntil('tr.header').slideToggle(100, function() {});
  });
});

function myFunction() 
{
  // Declare variables
  var input, filter, table, tr, td, i, txtValue;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");
  
  // Loop through all table rows, and hide those that don't match the search query
  for (i = 0; i < tr.length; i++) 
  {
   td = tr[i];
    if (td) {
      txtValue = td.textContent || td.innerText;
      if (txtValue.toUpperCase().indexOf(filter) > -1) 
      {
        tr[i].style.display = "";
      } 
      else 
      {
        tr[i].style.display = "none";
      }
    }
  }
}

CSS

table,
tr,
td,
th {
  border-collapse: collapse;
}

h4,
{
  margin: 0;
  padding: 0;
  font-family: Inter;
  font-style: normal;
  font-size: 20px;
  font-weight: 600;
  line-height: 28px;
}

label {
  padding: 10px 10px 10px 12px;
}

.tabledesign {
  width: 900px;
  border-collapse: separate;
  border-spacing: 0 15px;
  margin: 50px auto;
}

th {
  background: #e5e5e5;
  color: rgba(0, 0, 0, 0.84);
  font-weight: bold;
}

td,
th {
  padding: 10px;
  border: 1px solid #ccc;
  text-align: left;
  font-size: 18px;
}

#myInput {
  display: flex;
  background: #FFFFFF;
  font-family: Inter;
  /* Add a search icon to input */
  background-position: 10px 12px;
  /* Position the search icon */
  background-repeat: no-repeat;
  /* Do not repeat the icon image */
  width: 795px;
  /* Full-width */
  height: 46px;
  font-size: 16px;
  /* Increase font-size */
  padding: 12px 20px 12px 40px;
  /* Add some padding */
  border: 1px solid #ddd;
  /* Add a grey border */
  margin-bottom: 12px;
  /* Add some space below the input */
}

* {
  box-sizing: border-box;
}
aamkag61

aamkag611#

一个简单的解决方法是搜索innerHTML而不是textContent/innerText

txtValue = td.innerHTML;

相关问题