你在隐藏标题。你想隐藏的是卡片。
您可以通过执行h5[i].parentNode.parentNode来执行此操作,因为标题嵌套在卡的两层深处。
如果你的客户端浏览器支持它,你可以使用
Closest ancestor matching selector using native DOM?
或者如果您可以使用jQuery搜索
$(h5[i]).closest('.card');
function myFunction() {
var input, filter, card, h5, a, i;
input = document.getElementById("myFilter");
filter = input.value.toUpperCase();
card = document.getElementById("myItems");
h5 = card.getElementsByTagName("h5");
for (i = 0; i < h5.length; i++) {
var current = h5[i];
a = current.getElementsByTagName("a")[0];
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
current.parentNode.parentNode.style.display = "";
} else {
current.parentNode.parentNode.style.display = "none";
}
}
}
.container {
padding: 10px;
}
ul li {
list-style: none;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="container">
<div class="row">
<div class="col-sm-12 mb-3">
<input type="text" id="myFilter" class="form-control" onkeyup="myFunction()" placeholder="Search for names..">
</div>
</div>
<div class="row" id="myItems">
<div class="col-sm-12 mb-3">
<div class="card">
<div class="card-body">
<h5 class="card-title"><a href="#">Card One</a></h5>
<h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
<p class="card-text">Some text.</p>
</div>
</div>
<div class="card">
<div class="card-body">
<h5 class="card-title"><a href="#">Card Two</a></h5>
<h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
<p class="card-text">Some text.</p>
</div>
</div>
<div class="card">
<div class="card-body">
<h5 class="card-title"><a href="#">Card Three</a></h5>
<h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
<p class="card-text">Some text.</p>
</div>
</div>
</div>
</div>
</div>
但我建议你用
getElementsByClassName
要获取所有的卡,然后遍历它们,根据类名选择h5元素,然后访问
innerText
在h5中,不可见的文本就像一个链接
title="some thing cool here"
不会碍事的。
请参阅下面的片段。
function myFunction() {
var input, filter, myItems, cards, i, current, h5, text;
input = document.getElementById("myFilter");
filter = input.value.toUpperCase();
myItems = document.getElementById("myItems");
cards = myItems.getElementsByClassName("card");
for (i = 0; i < cards.length; i++) {
current = cards[i];
h5 = current.getElementsByClassName('card-title')[0];
text = h5.innerText.toUpperCase();
if (text.indexOf(filter) > -1) {
current.style.display = "";
} else {
current.style.display = "none";
}
}
}
.容器{
衬垫:10px;
}
乌尔里{
列表样式:无;
}
<link rel=“stylesheet”href=“https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css”integrity=“sha384-gn5384xqqqqaowxa+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm”crossorigin=“anonymous”>
<div class=“container”>
<div class=“row”>
<div class=“col-sm-12 mb-3”>
<input type=“text”id=“myFilter”class=“form control”onkeyup=“myFunction()”placeholder=“搜索名称..”>
</分区>
</分区>
<div class=“row”id=“myItems”>
<div class=“col-sm-12 mb-3”>
<div class=“card”>
<div class=“card body”>
<
<h6 class=“card subtitle mb-2 text muted”>卡字幕<h6>
<p class=“card text”>一些文本。<p>
</分区>
</分区>
<div class=“card”>
<div class=“card body”>
<h5 class=“card title”><a href=“#”>第二张卡</a></h5>
<h6 class=“card subtitle mb-2 text muted”>卡字幕<h6>
<p class=“card text”>一些文本。<p>
</分区>
</分区>
<div class=“card”>
<div class=“card body”>
<
<h6 class=“card subtitle mb-2 text muted”>卡字幕<h6>
<p class=“card text”>一些文本。<p>
</分区>
</分区>
</分区>
</分区>
</分区>