【发布时间】:2015-05-19 17:14:32
【问题描述】:
我有一个小产品搜索代码,我已经研究了一段时间。它工作得很好,虽然有点倒退。
我输入的关键字越多,理想情况下,显示的产品就越少(因为它缩小了结果范围)。但就目前而言,我在搜索系统中输入的关键字越多,显示的产品就越多,因为它会查找具有任何关键字的任何产品。 我想更改脚本,使其仅在结果包含所有搜索到的关键字时才显示结果,而不是其中任何一个...
对不起,冗长的解释。
这是肉和土豆(jsfiddle):
HTML:
<input type="text" id="edit_search" onkeyup="find_my_div();">
<input type="button" onClick="find_my_div();" value="Find">
<div id="product_0" class="name" style="display:none">Mac
<br/>Apple
<br/>
<br/>
</div>
<div id="product_1" class="name" style="display:none">PC
<br/>Windows
<br/>
<br/>
</div>
<div id="product_2" class="name" style="display:none">Hybrid
<br/>Mac PC Apple Windows
<br/>
<br/>
</div>
JAVASCRIPT:
function gid(a_id) {
return document.getElementById(a_id);
}
function close_all() {
for (i = 0; i < 999; i++) {
var o = gid("product_" + i);
if (o) {
o.style.display = "none";
}
}
}
function find_my_div() {
close_all();
var o_edit = gid("edit_search");
var str_needle = edit_search.value;
str_needle = str_needle.toUpperCase();
var searchStrings = str_needle.split(/\W/);
for (var i = 0, len = searchStrings.length; i < len; i++) {
var currentSearch = searchStrings[i].toUpperCase();
if (currentSearch !== "") {
nameDivs = document.getElementsByClassName("name");
for (var j = 0, divsLen = nameDivs.length; j < divsLen; j++) {
if (nameDivs[j].textContent.toUpperCase().indexOf(currentSearch) !== -1) {
nameDivs[j].style.display = "block";
}
}
}
}
}
因此,当您搜索“mac pc”时,应该显示的唯一结果是混合型,因为它具有这两个关键字。不是所有 3 种产品。
提前谢谢你!
【问题讨论】:
标签: javascript html search