足球新闻
狼队前锋拉森因伤缺阵,纽卡有意再报价引外界猜测?
Q 如何在Javascript中进行搜索功能?
javascript
search
filter
我试图在我的网页上做一个简单的搜索功能。每个产品都有一个名字,我希望搜索框过滤出产品,如果它们的名字与搜索框中的文本不匹配。如何在Javascript中进行搜索功能?
description
任何人都可以提供一种高效的方式来做到这一点?
请问您可以发布上述代码的JavaScript函数?除非你添加了这样的函数,否则目前没有搜索功能可言。 – 2015-03-02 13:04:33
只是一个提示:你想在HTML和JavaScript中使用小写字母和短划线来命名ID。 'searchBar'或'search-bar'比'searchbar'更合适。 – 2015-03-02 13:12:02
回答
1
这里是一个简单的搜索功能,将隐藏不是搜索词匹配的任何产物:
window.search = function() {
var search = document.getElementById("searchbar").value.toLowerCase();
var products = document.querySelectorAll(".product");
for (var i = 0; i < products.length; i++) {
var name = products[i].querySelector("b").textContent.toLowerCase();
products[i].style.display = name.indexOf(search) > -1 ? 'block' : 'none';
}
};
Description of product 1
如果你想搜索中也在寻找说明,你可以做这样的事情:
window.search = function() {
var search = document.getElementById("searchbar").value.toLowerCase();
var products = document.querySelectorAll(".product");
for (var i = 0; i < products.length; i++) {
var name = products[i].querySelector("b").textContent.toLowerCase();
products[i].style.display = (name.indexOf(search) > -1 || desc.indexOf(search) > -1) ? 'block' : 'none';
}
};
Description of product 1
如果你有很多产品,你可能想限制搜索直到用户停止输入一段时间(也许是500毫秒左右),这样就不会在每次击键时触发搜索。
这正是我所期待的。谢谢 – user7074482 2015-03-02 14:57:59
没问题,很高兴它帮助! – 2015-03-02 14:58:27
搜索框中的内容和产品中的名称大小写敏感吗?搜索p不会显示产品,但搜索P会显示产品。如果它不区分大小写会更好。 – user7074482 2015-03-02 15:06:07
我会在稍后编辑我的答案以使其不区分大小写 – 2015-03-02 15:12:38
编辑了答案以使其不区分大小写。希望现在能更好地工作! – 2015-03-02 15:17:31
这就像一个魅力。非常感谢你!! – user7074482 2015-03-02 15:36:01
我可以在搜索框中输入多个单词,例如“产品1”。这不会显示该产品(它应该显示,因为“产品1”是存在的),但如果我将搜索框中的文本更改为“产品”,它会显示所有包含“产品”的产品。有没有办法调整它,以便它可以接受多个单词? – user7074482 2015-03-02 16:13:27
当然可以,你只需要将搜索词拆分为一个数组并检查每个单词。我会编辑我的答案来展示如何做到这一点。 – 2015-03-02 16:22:35
window.search = function() {
var search = document.getElementById("searchbar").value.toLowerCase();
var searchWords = search.trim().split(' ');
var products = document.querySelectorAll(".product");
for (var i = 0; i < products.length; i++) {
var name = products[i].querySelector("b").textContent.toLowerCase();
var match = true;
for (var j = 0; j < searchWords.length; j++) {
if (name.indexOf(searchWords[j]) === -1 && desc.indexOf(searchWords[j]) === -1) {
match = false;
break;
}
products[i].style.display = match ? 'block' : 'none';
};
这个更新的代码会将搜索框中的每个单词拆分成一个数组,然后检查每个产品的名称和描述是否包含所有这些单词。如果一个产品包含所有的搜索词,它就会显示出来;否则就会隐藏。你可以尝试将这个代码替换到你的项目中看看效果。
上一篇:NBA直播吧:尤文追逐穆阿尼无果,转会搁浅,时间紧迫
下一篇:沙特球队利雅得胜利官宣!签下左后卫萨阿德·纳赛尔,签约三年
相关资讯
-
沙特球队利雅得胜利官宣!签下左后卫萨阿德·纳赛尔,签约三年
-
狼队前锋拉森因伤缺阵,纽卡有意再报价引外界猜测?
-
NBA直播吧:尤文追逐穆阿尼无果,转会搁浅,时间紧迫
-
梅西梅开二度助迈阿密国际晋级决赛,赛后透露身体不适仍登场
-
巴西男篮55分夺冠时隔16年捧杯,热刺球星女友竟连续两次怀龙凤胎?
-
邮报:曼联拒梅努租借离队要求,他想为生涯争取更多机会?
-
NBA直播吧:切尔西母公司敲定恩西索交易,未来或加盟蓝军?
-
新赛季沙特超首轮:菲利克斯帽子戏法闪耀,相隔六年再圆梦
-
重磅!NBA直播吧:那不勒斯接近5000万欧元签下曼联前锋霍伊伦?
-
西甲第3轮瓦伦西亚3-0胜赫塔菲,博达拉斯赛后发声
-
德甲第二轮:汉堡同城德比0-2负,第三轮战拜仁盼首球首胜?
-
8月30日阿斯报预测西甲第3轮:皇马对阵皇家马略卡首发