完全在JS中,没有服务器后端。我需要允许用户搜索,然后显示匹配名称列表。我正在使用jQuery UI AutoComplete,但需要一些JS来过滤结果。
给出一个名字数组:
Bob Hope
James Jones
Steve Jobs
Larry McBridge
给出像Bo这样的搜索词。
我怎样才能让Bob Hope回归
给出像b这样的搜索词:
除了詹姆斯琼斯,我怎能得到所有人?
用于比较两个字符串的简单JS?感谢
答案 0 :(得分:8)
var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"]
var query = "bo"
var results = $(names)
.map(function(i,v){
if(v.toLowerCase().indexOf(query.toLowerCase())!=-1){return v}
}).get()
// results is ["Bob Hope"]
答案 1 :(得分:2)
也许我误解了你(考虑到上述答案的复杂性),但我提出了使用jQuery的this。每次按下某个键(当输入具有焦点时),它将搜索页面上的所有li
元素,并查找它们是否包含搜索词。
这是HTML:
<ul><li>Bob Hope</li>
<li>James Jones</li>
<li>Steve Jobs</li>
<li>Larry McBridge</li></ul><br>
Search: <input id="search" length="24" />
这是你的jQuery:
$("#search").keyup(function(){
$("li").hide();
var term = $(this).val();
$("li:contains('" + term + "')").show();
});
答案 2 :(得分:0)
使用Ivan的答案,但改变了ES6:
var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"];
function findIn(s, list){
return list.filter((v) => v.toLowerCase().indexOf(s.toLowerCase()) != -1 );
}
findIn('bo', names);