我正在为我的网站进行实时搜索结果功能。我有一个JSON对象,其中包含我想要匹配输入值的关键术语。
我能想到的最佳解决方案是在循环中遍历每个术语并查找与jQuery选择器的部分匹配。我该如何制作这样的if语句?例如:
$.getJSON('jsonfile.json', function(data) {
key = Object.keys(data);
for(i=0;i<key.length;i++)
{
if($(input[value]:contains == key[i].term)
{
//do something
}
}
}
编辑:我不清楚道歉。我正在使用:contains选择器对一个输入的值进行部分匹配。
答案 0 :(得分:3)
您需要将:contains
选择器构建为字符串:
if($('input[value]:contains("' + key[i].term + '")').length) {
//do something
}
选择器将返回输入包含术语的所有元素;添加.length
为要评估的if语句提供了一个简单的“truthy”值(0项返回==“false”和&gt; 0项返回==“true”)。
编辑:我不确定input[value]:contains()
是否是有效的jQuery选择器,因为我不知道文件:contains()
在输入元素上看到了什么。您可能需要通过自己检查每个输入的值来帮助它。您可以将找到的输入过滤到值包含您要搜索的术语的输入:
if ($('input[value]').filter(function() {
return $(this).val().indexOf(key[i].term) != -1;
}).length) {
//do something
}
答案 1 :(得分:2)
如果您的项目非常少(例如几十个),您可以创建一个匹配其中任何项目的正则表达式:
var match = keys.join("|")
var regexp = RegExp.new(match, 'i') // Case insensitive
if($(input).val().match(regexp)) {
// do stuff
}
是的,我知道这不会搜索符合条件的任何输入,你必须事先知道输入元素,但是从你的问题我想你要检查一个输入元件。
不知道它是否比循环遍历所有术语并逐个检查更快,但我认为它确实更具可读性。
这可以与jQuery的grep
或each
方法结合使用:
var match = keys.join("|")
var regexp = RegExp.new(match, 'i')
// With grep
var matches = $('input').grep(function(elem, idx) {
return $(input).val().match(regexp) != null;
})
// Or with each
$('input')..each(function(idx, elem) {
if ($(input).val().match(regexp) != null) {
// Do stuff
}
});
grep
选择与所有搜索字词匹配的所有输入字段供以后使用,each
遍历所有元素以立即对其进行操作。