使用 jquery 搜索多个列表并显示搜索项
Search multiple lists and dispaly search items using jquery
<!-- display only the sentences in a list whose starting letter matches the letter selected from the drop down list -->
$("document").ready(function() {
$("#alphalist").change(function(){
$(".lists").hide();
$("#" + $(this).val()).show();
});
});
<!-- code to search from currently displayed list -->
function myFunction() {
var input, filter, ul, li, a, i, txtValue;
input = $("#searchbox");
filter = input.value.toUpperCase();
ul = $("ul");
li = ul.$("li");
for (i = 0; i < li.length; i++) {
a = li[i].$("a")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
}
else {
li[i].style.display = "none";
}
}
}
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<select class="dropdown" id="alphalist">
<option value="a" selected>A</option>
<option value="b">B</option>
</select>
<input class="input" type="text" id="searchbox" placeholder="Search...." onkeyup="myFunction()"/>
<div class="lists" id="a">
<ul id="alist">
<li><a href="#">All is well</a></li>
<li><a href="#">Any body can dance</a></li>
<li><a href="#">As you like it</a></li>
</ul>
</div>
<div class="lists" id="b" style="display:none">
<ul id="blist">
<li><a href="#">Before the sunset</a></li>
<li><a href="#">Blink your eyes</a></li>
<li><a href="#">Bukkle up</a></li>
</ul>
</div>
</body>
</html>
这只是一个小例子。在这里,我使用 select 标记和两个 ul 列表创建了两个选项(A 和 B)。第一个列表包含以字母 'a' 开头的句子,第二个列表包含以字母 'b' 开头的句子。第一个 jquery 代码显示的句子列表的首字母与下拉选项中 selected 的字母相匹配。
但问题在于搜索。考虑 selecting 选项 B,它会列出以 B 开头的句子。之后,如果我在搜索栏中写了一些东西,我想显示当前显示列表中的匹配句子(以 b 开头的句子)。我试过了,但没有得到我想要的结果。请帮助我。
我已经更新了您的搜索代码。
$("#searchbox").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("div.lists li").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
<!-- display only the sentences in a list whose starting letter matches the letter selected from the drop down list -->
$("document").ready(function() {
$("#alphalist").change(function(){
$(".lists").hide();
$("#" + $(this).val()).show();
});
});
<!-- code to search from currently displayed list -->
function myFunction() {
var input, filter, ul, li, a, i, txtValue;
input = $("#searchbox");
filter = input.value.toUpperCase();
ul = $("ul");
li = ul.$("li");
for (i = 0; i < li.length; i++) {
a = li[i].$("a")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
}
else {
li[i].style.display = "none";
}
}
}
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<select class="dropdown" id="alphalist">
<option value="a" selected>A</option>
<option value="b">B</option>
</select>
<input class="input" type="text" id="searchbox" placeholder="Search...." onkeyup="myFunction()"/>
<div class="lists" id="a">
<ul id="alist">
<li><a href="#">All is well</a></li>
<li><a href="#">Any body can dance</a></li>
<li><a href="#">As you like it</a></li>
</ul>
</div>
<div class="lists" id="b" style="display:none">
<ul id="blist">
<li><a href="#">Before the sunset</a></li>
<li><a href="#">Blink your eyes</a></li>
<li><a href="#">Bukkle up</a></li>
</ul>
</div>
</body>
</html>
这只是一个小例子。在这里,我使用 select 标记和两个 ul 列表创建了两个选项(A 和 B)。第一个列表包含以字母 'a' 开头的句子,第二个列表包含以字母 'b' 开头的句子。第一个 jquery 代码显示的句子列表的首字母与下拉选项中 selected 的字母相匹配。
但问题在于搜索。考虑 selecting 选项 B,它会列出以 B 开头的句子。之后,如果我在搜索栏中写了一些东西,我想显示当前显示列表中的匹配句子(以 b 开头的句子)。我试过了,但没有得到我想要的结果。请帮助我。
我已经更新了您的搜索代码。
$("#searchbox").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("div.lists li").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});