我开始了使用 Javascript 创建类似 iTunes 的搜索的旅程。我了解了 jQuery,并在 StackOverflow 上的一些人的帮助下,我取得了成功。
我回到这里与您分享一种基于用户输入创建动态隐藏/显示列表的非常简单的方法。
Let's search!
完整的教程代码可以在这里找到。
它的 JSFiddle 就在这里!
首先,创建一个简单的 div 布局,在 div 和上方的搜索栏中包含一些文本。
<div class="search_bar">
<form><!--The Field from which to gather data-->
<input id="searchfield" type="text" onclick="value=''" value="Case Sensitive Search">
</form>
</div>
<!--Containers With Text-->
<div class="container">
<div class="container_of_hc">
<div class="horizontal_containers">Cat</div>
<div class="color">Black</div>
<div class="color">White</div>
<div class="color">Orange</div>
</div>
<div class="horizontal_containers">Dog</div>
<div class="horizontal_containers">Rat</div>
<div class="horizontal_containers">Zebra</div>
<div class="horizontal_containers">Wolf</div>
</div>
CSS:
.container {
width: 100%;
}
.horizontal_containers {
height:10%;
border: solid 3px #B30015;
font-size: 45px;
text-align: center;
}
其次,您将使用 jQuery 创建一个脚本。请记住标题说这是一个动态搜索,这意味着(对我们而言)我们希望使用键入的每个键来更新搜索:
$("#searchfield").keyup(function() {
注意:需要选择器复习吗?
然后我们将变量设置为#searchfield 中的值:
var str = $("#searchfield").val(); //get current value of id=searchfield
为了确保在搜索字段中没有任何内容时显示列表中的所有 div,我们根据新变量 (str) 的长度创建一个 if 语句:
if (str.length == 0) {
//if searchfield is empty, show all
$(".horizontal_containers").show();
}
最后,如果 str 的长度不为 0,我们会实际隐藏 div:
else {
//if input contains matching string, show div
//if input does not contain matching string, hide div
$("div:contains('" + str + "').horizontal_containers").show();
$("div:not(:contains('" + str + "')).horizontal_containers").hide();
}
});
div:contains()
anddiv:not(:contains())
语句用于设置条件。它本质上是一个 if 语句。他们搜索包含在 div 中的文本,而不是 div 属性。如果要搜索更深的 div 结构,可以在脚本的 jQuery 语句中使用多个选择器,如下所示:
if (str.length == 0) {
//if searchfield is empty, show all
$(".container .color").show();
} else {
//if input contains matching string, show div
//if input does not contain matching string, hide div
$(".container div:contains('" + str + "').color").show();
$(".container div:not(:contains('" + str + "')).color").hide();
}
替换您已经尝试过的脚本语句。
注意:div 的嵌套结构必须与选择器中的嵌套结构相匹配。
基本上就是这样。如果您有改进的技巧,知道如何将其更改为不区分大小写的搜索,或者您能想到的任何其他内容,请告诉我!
感谢 MrXenoType,我学会了 :contains 函数不区分大小写。
要为此项目创建不区分大小写的搜索,只需添加:
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
这会为 contains 函数创建一个伪。将此代码放在您的其他脚本之上(在同一脚本中),以仅适用于该脚本。
很高兴看到尼克在这个实验中取得了成功。在学习如何做这件事上做得很好:)
万一您还没有遇到过这个 jquery 插件,您可能也想看看它,它被称为快速搜索。
https://github.com/riklomas/quicksearch
我已经在许多页面上使用过它,它就像一个魅力。示例: http: //fedmich.com/works/types-of-project.htm
尝试:
$.expr[":"].contains_nocase = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
用于使用 jQuery 1.8 添加 :contains_nocase() 选择器