jQuery匹配JSON对象的部分文本

时间:2012-09-15 22:25:09

标签: javascript jquery json contains

我正在为我的网站进行实时搜索结果功能。我有一个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选择器对一个输入的值进行部分匹配。

2 个答案:

答案 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的grepeach方法结合使用:

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遍历所有元素以立即对其进行操作。