我有一个jQuery搜索功能,但是它不一起单独搜索单词。例如在搜索Asus STRIX B350-F GAMING时可以看到“ ASUS B350”而不是“ ASUS”和“ B350”,“ ASUS B350”不会产生任何结果,但会显示“ ASUS”和“ B350”。
$("#mySearch").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#myTable tr:not(.discarded) td:nth-child(1)").filter(function() {
$(this).parent().toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
我还希望将字符串括在“”中,以便按顺序搜索这些单词。
如果您需要更多详细信息,请告诉我
谢谢
答案 0 :(得分:2)
您可以split
在每个空格处输入单词,并使用every
检查文本中是否存在这些单词:
现在,如果您在以下代码段中搜索“ Asus strix”,则将同时显示两个ASUS结果
$("#mySearch").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#myTable tr:not(.discarded) td:nth-child(1)").filter(function() {
let toggle = value.split(" ").every(i => !i || $(this).text().toLowerCase().indexOf(i) > -1);
$(this).parent().toggle(toggle);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="mySearch" />
<table id="myTable">
<tr><td>Asus STRIX B350-F GAMING</td></tr>
<tr><td>Asus ROG Strix SCAR II Gaming</td></tr>
<tr><td>Dell G7 15 Gaming Laptop</td></tr>
</table>
答案 1 :(得分:0)
您可以使用正则表达式模式来找出字符串中是否存在单个单词:
$("#mySearch").on("keyup", function() {
var value = $(this).val().toLowerCase();
if(!(value.startsWith('"')&&value.endsWith('"'))){
value=value.replace(" ", "|");
value= value.trim();
}else {
value=value.replace("\"", "");
}
$("#myTable tr:not(.discarded) td:nth-child(1)").filter(function() {
$(this).parent().toggle($(this).text().toLowerCase().match(value));
});
});